Add EnvironmentContext and Config to MigrationContext

My use case is that in my migrations, I want to be able to execute SQL that uses a schema name and the schema name is something that will be configured differently depending on the user or CI or deployment system that is running.

I modified the code so that the `MigrationContext` has access to the `EnvironmentContext` and the config (which comes from `alembic.ini).

This lets migrations do stuff like:

```python
# 13189a2dd36_populate_stuff.py

...
schema = op.get_context().config.get_main_option('schema')
...
def downgrade():
    print("downgrade (%r): schema = %r" % (revision, schema))
    op.execute("""
        TRUNCATE TABLE {schema}.FooTable;
        """.format(schema=schema))
```

where `schema` is a custom option that I added to `alembic.ini`

```ini
# alembic.ini

...
sqlalchemy.url = mssql+pymssql://...
schema = foobar_schema
...
```