This is a library, it shouldn't log

Logging of errors is left up to the caller, not the library itself.
Major rework of the client library

- No longer call GET on firebase until Value is explicitly called
- Allow passing in of destination pointers so that this can be used
  with the same structs that we can use with json
- No longer allows nil return values to indicate error. Errors indicate
  error.
- Some internal code cleanup/removed redundancy around serialization.
Merge branch 'rework'