BREAKING CHANGE
heartbeat: 0 now correctly disables heartbeats, sending 0 in the ConnectionTuneOk frame regardless of the server's suggestion. This aligns with the AMQP 0-9-1 spec, which defines heartbeat=0 as "disabled".
Previously, 0 was passed through negotiate() which treated it as "no preference", causing the server's suggested value to be used instead.
Migration: if you are passing heartbeat: 0 and want to preserve the old behaviour of accepting the server's value, omit the option or pass null instead.