Basic support for adding and removing foreign keys

We had this as a GSoC idea but there was no accepted student to work on it. Because I was really looking forward to see this in `rails/rails` I made a first draft.

This patch adds basic support for adding and removing foreign keys using the migration DSL:

```ruby
add_foreign_key :from, :to # will add the key to `to_id`
add_foreign_key :from, :to, column: "fk_id" # with specific column

add_foreign_key :from, :to, on_delete: :restrict # to specify ON DELETE RESTRICT
add_foreign_key :from, :to, on_delete: :cascade # to specify ON DELETE CASCADE
add_foreign_key :from, :to, on_delete: :nullify # to specify ON DELETE SET NULL

add_foreign_key :from, :to, on_update: :cascade # to specify ON UPDATE CASCADE
add_foreign_key :from, :to, on_update: :nullify # to specify ON UPDATE SET NULL

add_foreign_key :from, :to, name: "my_fk" # with specific name
add_foreign_key :from, :to, primary_key: "special_pk" # will reference `special_pk` from `:to`
```

Removing a foreign key works mostly the same:

```ruby
remove_foreign_key :from, :to # will remove foreign key on `to_id`
remove_foreign_key :from, column: "fk_id" # will remove foreign key on `fk_id`
remove_foreign_key :from, name: "my_fk" # will remove foreign key named `my_fk`
```

Foreign keys are dumped after the indexes to `schema.rb`. The options `name` and `column` are always dumped. `dependent` only when set.

`add_foreign_key` is reversible, `remove_foreign_key` is not.

There is a `connection#supports_foreign_keys?` method to determine wether the adapter does support the API.

### TODO:
- [x] Write documentation
- [x] Decide wether `add-/remove_foreign_key` should be no-op when `supports_foreign_keys?` is `false`
- [x] Make sure it works with automatic test schema maintenance (#15394)
- [x] Schema dumping must ensure the tables are created in the right order
- [x] Handle long identifiers.
- [x] rename dependent to `on_delete` and introduce `on_update`
- [ ] rename when a table / column is renamed.

### Future Work (not this PR):

- Support foreign keys when creating a table (This would allow SQLite to use FK's as well)


This patch was hugely inspired by `foreigner`. Credits to @matthuhiggins :heart:
else ArgumentError ?