Switch to using a requirements.txt file for Python requirements.
Bump Vagrant VM to 2GB RAM (apache likes RAM).
Add PhantomJS and Selenium to Ansible for scripting/tests.
Fix an error in sockjs teacher_handler.py
Scripts for simulating a student attempting homeworks, as well as multiple parallel students.
Script to automate creating a bunch of students in WebWork.
Create some SQLAlchemy ORM model classes.

There's some metaprogramming mumbo jumbo in src/databases/base.py to
handle the fact that in WebWork, courses each have their own tables with
the course name in the table name for every table related to WebWork.
Update hint model to match schema.
Create Alembic migration setup, add a test migration.

The tricky bit here is that since each course has its own tables, when
running Alembic tasks you need to provide the course name on the command
line, like 'alembic -x course_name=UCSD_CSE101 upgrade head'. Each
course also keeps track of its own Alembic migration state in its own
version table (see env.py).