Add AR::Base#validate! method

Acts same as valid? but raises AR::RecordInvalid exception
if validation fails
Make the apply_inflections method case-sensitive

Since d3071db1, the apply_inflections method check if the downcased
version of a string is contained inside the "whitelist" of uncountable
words. However, if the word is composed of capital letters, it won't be
matched in the list while it should.

We can't simply revert to the previous behavior as there is a
performance concern (benchmarked over /usr/share/dict/words):

Before d3071db1  135.610000   0.290000  135.900000 (137.807081)
Since d3071db1   22.170000    0.020000  22.190000  ( 22.530005)
With the patch   22.060000    0.020000  22.080000  ( 22.125771)

Benchmarked with http://git.io/aFnWig

This way, the solution is to put the down-case version of words inside
the @uncountables array.
fk: `add_foreign_key` and `remove_foreign_key` for PostgreSQL adapter.
fk: add `foreign_keys` for PostgreSQL adapter.
fk: `foreign_keys`, `add_foreign_key` and `remove_foreign_key` for MySQL
fk: generalize using `AlterTable` and `SchemaCreation`.
fk: `:primary_key` option for non-standard pk's.
fk: dump foreign keys to schema.rb

respect `table_name_prefix` and `table_name_suffix`.
fk: support dependent option (:delete, :nullify and :restrict).
fk: make `add_foreign_key` reversible.
fk: infere column name from table names.

This allows to create and remove foreign keys without specifying a column.
fk: rename `dependent` to `on_delete`
fk: support for on_update
fk: raise when identifiers are longer than `allowed_index_name_length`.
fk: dump foreign keys at the bottom to make sure tables exist.
fk: `add/remove_foreign_key` are noop for adapters that don't support fk
fk: raise for invalid :on_update / :on_delete values
fk: use random digest names

The name of the foreign key is not relevant from a users perspective.
Using random names resolves the urge to rename the foreign key when the
respective table or column is renamed.
fk: review corrections: indent, visibility, syntax, wording.
fk: add docs