Initial implementation

This is a basic implementation of the ideas we discussed before about automatically validating database constraints. 

First of all, this gem includes 3 validators:

- `NotNullValidator`: checks whether the value is anything but `nil`. This is different from the standard `PresenceValidator`, because that one also errors on empty strings. `NotNullValidator` matches the NOT NULL database constraints exactly.
- `BytesizeValidator`: checks whether a string/blob is not larger than a given `:maximum` in bytes. The LengthValidator will check for characters, which doesn't work for TEXT and BLOB fields.
- `BasicMultilingualPlaneValidator`: checks whether all characters in a string are from the basic multilingual plane, i.e. fit in 3 UTF-8 bytes.

You can instantiate these by hand if you wish:

``` ruby
   validates :required, not_null: true
   validates :string, basic_multilingual_plane: true
   validates :blob, bytesize: { maximum: 65535 }
```

But next to these validators, it also adds a `DatabaseConstraintsValidator`, which generates a bunch of sub-validators based on the schema.
- For NOT NULL fields, it can add a NotNullValidator.
- For textual and binary blob fields, it can add a BytesizeValidator (TEXT and BLOB fields) or a LengthValidator (VARCHAR fields).
- For textual fields that have a `utf8mb3` collation, it can add a `BasicMultilingualPlaneValidator`.

By default, it will only generate size validators, unless you specify you want other validators as well.

``` ruby
  validates :string, database_constraints: true # adds just a size validator
  # or, specify you want everything:
  validates :required_string, database_constraints: { constraints: [:not_null, :size, 
:basic_multilingual_plane] }
  # or, specify you want everything available:
  validates :required_string, database_constraints: { constraints: :all }

```

One thing to note is that the validators are created lazily, i.e. the first time a record is validated. This prevents leading the schema of the table at boot time.

@fw42 @byroot @jduff for review.
This one is not turned on by default, but you can turn it on. E.g., for important fields like titles or handles it may be wise to turn a validation like this on.