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
Propagate server, handler initialization errors.
Allow config overrides via environment variables.

* Add `LoadEnvironment()` and an `Environment` type.
* Add the `env:` tag to all configuration struct fields. Environment
  variable names are case-insensitive.
* `Environment.Unmarshal()` uses reflection to decode configuration
  options specified via environment variables into a config struct.
* `Load{ConfigForSection, ExtensibleSection}()` now override TOML
  configuration fields with environment variables.

Overriding extensible section types is not currently supported.
`decodeEnvField()`: Support extensible sections.

* Environment variable names are now constructed from section names.
* Explicit `env:` tags are no longer required. The field name will be
  used if the tag is omitted.