Restructure the entire app.

Fixes #198 

This branch splits the API into modular components - thus eliminating the issue
with the large file.

It also separates the API and frontend into two separate applications.

This branch will require extensive testing + still needs some work (on my
part).

Currently, it's in a working state but I intend to do some additional
refactoring.

# Before merging:
* get master in here and clean up conflicts
* modify `config.py` so that testing and debug are turned off
  * remove csrf protection env vars

# Currently broken:
- [ ] async emails
 * working outside of application context
- [ ] custom http error pages in general
 * they're defaulting to Flask's default error pages
- [ ] returning the right JSON for API 400's/403's
- [x] travis tests
- [x] api routes to time_slots module

# To Test:
* User's API
* Post API
* Finance API
* Voting API
* Photos/events API