WIP: Migration DSL

Started on a migration DSL.

Here's an example of what works so far:

```elixir
def up do
  create_table(:products)
    .string(:name)
    .decimal(:price)
    .timestamps
end

def down do
  drop_table :products
end
```

The DSL functions build up an AST, intended to be passed to the adapter.
The adapter would be responsible for generating the DDL in the dialect the DB expects.

### TODO

- [x] table functions (create_table, drop_table)
- [x] column functions (column, aliases: string, boolean, timestamps etc..)
- [x] index functions (create_index, drop_index)
- [x] change_table (column, aliases, remove, change)
- [ ] shortcuts for change_table (add_column, remove_column, change_column)
- [x] execute() function
- [ ] existence functions (column_exists?, table_exists?, index_exists?)
- [x] adapter specific DDL generator
- [ ] support string-based migrations by checking return value?
- [ ] document