[Aggregations] Meta data support

This commit adds the ability to associate a bit of state with each individual aggregation.

Use cases:
- Typed clients can inject some state so that the deserialization
  process has enough information to deserialize the aggregations into
the correct type. Facets return `_type` to signal what kind of facet the
response corresponds with.
- UI state, since aggregations can be nested at arbitrary depths
  injecting pieces of UI state can greatly simplify programming with
aggregations since there are no two tree data-structures to walk anymore only the aggregation data.