Add license headers. Clean up godoc comments.
Review feedback.

* Extract `Locator` into a separate file.
* Use `Router.Locator()` and `Serv.FullHostname()` consistently.
* `Router.FormatURL()` => `formatURL()`.
* Clean up the `usingSSL` conditional in `Serv.Init()`.
Simplify `TestClient.notifyAll()`.
Export `Conn.Packets`.
Remove `Conn.UnregisterDecoder()`.

Re-add `Conn.decoderLock`. This allows decoders to be added
and accessed concurrently, matching the behavior of, e.g.,
`http.Transport.RegisterProtocol()`.
`client.MustGenerateIds()` => `id.MustGenerate()`.
Refactor client packet handling.

* Remove `requestWith{Marshal, Errors}`. The `Request` interface now
  embeds `json.Marshaler`.
* Remove `nilId` and `getId()`.
* Add `Exchange` and `HasType` interfaces.
* Add a `clientPacket` interface for describing outgoing client packets
  containing reply and error channels. Factor out reply handling into
  `{close, reply, do}ClientPacket()`.
* `Client{Unregister, Ping, Purge, ACK}` packets can optionally track
  replies. This replaces embedding the packet in a `ClientTracked`
  struct provided by the client tests.
* Add `New{Helo, Register, Unregister, Ping, Purge, ACK}()`.
Client: Export all `*Error` struct fields.
Remove `Conn.decodeUpdate()`.
Move the tests into the `simplepush` package.