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
* The internal_consoles folder and users_profile_internal file should be removed

# Currently broken:
- [x] admin
- [x] async emails
 * working outside of application context
- [x] custom http error pages in general
 * they're defaulting to Flask's default error pages
- [x] returning the right JSON for API 400's/403's
- [x] travis tests
- [x] api routes to time_slots module
- [x] page doesn't refresh on successful login

# To Test:
- [x] User API
- [x] Post API
- [x]  Finance API
- [x] Voting API
- [x] Photos/events API
- [x] Tutoring