first pass at reflection to DRY up param parsing

WIP

Clean up parameter parsing to make it much DRYer (will help with adding new resources, parameters, etc in the future).

- [x] Add parsing logic
- [x] Use this for one resource
- [ ] Get feedback!
- [ ] Make changes, apply to rest of resources
- [ ] Figure out booleans (specifically booleans with default of `false`)
- [ ] DRY metadata
- [ ] DRY non-resource params (`total_count`, etc).

Thoughts on the direction so far?

/cc @cosn @kyleconroy 
So the reason this exists is because `opposite: true` is potentially needed for booleans that default to false. Not sure how to handle those.