Better options/arguments handling

1. Use a single value for the default (i.e., empty) options argument,
and for protocol fields defaulted to an empty object.

2. There's no need to default the `arguments` field for those methods
that accept it instead of options. It's already defaulted in the
specification, and therefore in defs.js.

3. In the methods that have an `options` parameter with fields
promoted from `arguments`, use `Object.create` to create a fresh
object in which to put those promoted fields. I have to be careful not
to mask fields by setting them to undefined, hence
`setIfDefined()`. This requires a change to the table encoding
procedure to *not* ignore fields inherited from a prototype. This is
safe because `for..in` will ignore nonenumerable fields, i.e., those
inherited from the built-ins.
Bump protocol defs for recent rabbitmq extensions
Don't emit redundant (and invalid) variable ref

The code generation had a format call that provided one too many
arguments, resulting in a trailing variable reference that hadn't been
defined. This only shows up if the file is not uglified, since that
will remove the redundant expression.

Relatedly, it was possible to generate the defs.js file without then
uglifying it, by running `make` before `npm install`.