`Request.Id()` now returns `(interface{}, error)`.

* Update the `Requests` map type definition.
* Add an internal `requestWithMarshal` interface for describing
  serializable requests. Custom request packets no longer need to
  explicitly implement `json.Marshaler`.
Add utility method tests.

Fix a typo in `validIdRuneAt()`.
Add `MustGenerateIds()`.
Make `DialId()` and `Conn.WriteHelo()` variadic.

`ClientHelo.MarshalJSON()` now automatically includes an empty
`"channelIDs"` array in the marshaled output if the `ChannelIds` field
is omitted.
Ensure `ClientPing` implements `Request`.

Anonymous request packets now return `nil` instead of `""` as their
placeholder IDs. Packet type constants now start at 1.
Add support for decoding ping packets.