Run migrations on test DB with alembic --tag=test.

Summary:
You can now run alembic migrations on the test database dump with the following
sequence of commands:

mysql test < tests/data/base_dump.sql
alembic upgrade head --tag=test
mysqldump test > tests/data/base_dump.sql

Hopefully this will make it easier to keep the test dump current, and also help
us sanity-check our migration scripts.

Test Plan: I did this with a pending migration script I have and it worked.

Reviewers: spang

Reviewed By: spang

CC: kav-ya, mg

Differential Revision: https://review.inboxapp.com/D69
Use log_uncaught_errors on each new greenlet.

Summary:
For classes that inherit from Greenlet, move the implementation of _run(self)
to _run_impl(self), and use _run to wrap the call in an exception logging
handler.

Test Plan:
Throw an exception inside a decorated _run() method and check that
it gets logged. ./runtests passes.

Reviewers: spang

Reviewed By: spang

Differential Revision: https://review.inboxapp.com/D71
check if folders exist before mounting them
default to removing pyc files and not writing bytecode on start

Test Plan: try having some `.pyc` files around...

Reviewers: spang

Reviewed By: spang

CC: emfree

Differential Revision: https://review.inboxapp.com/D61
Not sure why, but the default encoding in my shell was `ISO-8859-1`, which was causing sys.stdout to fail when printing unicode.

Test Plan:
    >>> import sys
    >>> print(sys.stdout.encoding)
    utf_8

Reviewers: spang

Reviewed By: spang

Differential Revision: https://review.inboxapp.com/D78
Update README.md
Fixes a *huge* bug, where we weren't actually saving to/cc/bcc/etc. if the message had more than one address...

Test Plan: just query your db for stuff like `message.cc_addr` to see how bad this bug is :(

Reviewers: spang

Reviewed By: spang

Differential Revision: https://review.inboxapp.com/D77
Fix remove_messages deletes not cascaded.

Summary:
Deletes were not cascaded i.e. deleting a uid did not cause the corresponding message etc. to be deleted.
This was because of how the Query.delete() works in SQLAlchemy, see: http://docs.sqlalchemy.org/en/rel_0_9/orm/query.html#sqlalchemy.orm.query.

This commit fixes that by using session.delete() instead.

Test Plan: None.

Reviewers: spang

Reviewed By: spang

Differential Revision: https://review.inboxapp.com/D75
use master branch
check for config file, PYTHONIOENCODING, remove pyc, and colorize
Update README.md
Switch to our own fork of zerorpc

See why
https://github.com/inboxapp/zerorpc-python/commit/33b3dc675dab9db5fb6ed1
d8dd7ddca9a0d5e76b
Use MesssagePack for serialization in cache

See
https://github.com/inboxapp/inbox-util/commit/91b06cf5d27069bd8394bd2ba0
d2591adf027e6c
goofy mg
missing arg for showing status
Move misc utils back here.

Separating them out while things are still changing so quickly is too
confusing. We can rip out code we want to share later.
We're only using these in the message parsing, and the way these functions wrap flanker removes a lot of the nice stuff the module provides, like the `full_spec()` function. So I'm pulling it out of utils for now.
Rip out some inbox-util setup code which I missed.
Actually bail when the db isn't stamped or up-to-date.
reverting to pickle because msgpack doesn't support namedtuples