Cleanup flow types
As suggested in #330, there is a lot of work that could be done to get more value from flow. I'd love to get input from folks with more experience however I will start laying out areas where I believe we could see improvement.

- [x] Enable flow on all src files (completed in #338)
- [ ] Increase type specificity (specifically, remove occurrences of `any` type... where possible)
- [ ] Increase type discoverability

---

### Increase type discoverability

As I began to work through initial PRs and eventually #338, I found it difficult to know what types existed, and when to use them. Some types were declared within individual modules. Some types lived in a root level `types.js` file. Some types lived within a third party library. And finally, some types were declared in library definitions.

I haven't been able to find a ton of resources on the subject but I'd really like to discuss how types should be organized. How can we increase discoverability of existing types? How can we make the decision of where to define a new type easier? The only hint I have seen is from a small excerpt in a [flow styleguide](https://github.com/ryyppy/flow-guide/tree/master/styleguide#type-definitions--types-file):

> Gather common types into Type files / submodules. Rule of thumb: Use a dedicated type file as soon as a type represents an integral entity of the whole module.

As a first pass, I think it could be beneficial to create a types directory, and separate the various types defined within `types.js`.