Refactor packet ID handling.

* Add a `PacketId` type for internal packet identifiers.
* `{Request, Reply}.Id()` no longer return errors.
* `Conn.Send()` now closes the connection with an error if a packet
  contains a `nil` ID. The `nilId` constant may be used by tests to
  simulate `nil` IDs.
* `ClientPing` is now a synchronous request packet.
Remove unused `Notification` packet type.
Add smoke tests.
Client: Add missing license headers.