Refactor client packet decoding.

Incoming client packets are now decoded into structs, rather than
`map[string]interface{}`. This allows handlers to defer unmarshaling
opaque fields (e.g., ping data) via `json.RawMessage`.

Go's JSON decoder uses case-insensitive matching for struct field names
even if an explicit `json:` tag is specified. This invalidates two of
the `TestHeloCase()` tests; however, this is an implementation-specific
behavior. As before, clients should assume that field names and values
are case-sensitive.
Merge pull request #83 from mozilla-services/feature/decoding-refactor

Refactor client packet decoding, take 2