First phase of support for expand

- change all expandable types from string to struct
- add UnmarshalJSON methods to all objects to handle the id-vs-struct
  deserialization