Adds support for many MySQL types

This will probably fail on Travis right now, it depends on this: https://github.com/felixge/node-mysql/pull/402 being merged into node-mysql to support the MySQL Set type.

Otherwise it could probably do with a unit test for every type (Int, Uint, TinyInt... blah), though I did make explicit tests for the more exotic types.

It also changes how the additional schema/backend specific types are registered/work.

I declared them as objects with a `parse()` method in mysql.js, and changed mainline juggling to check `hasOwnProperty('parse')` before falling through. This removes the need to register types in the array found in AbstractClass.

Anyway, lots of changes, not sure how you'll feel about them. The spacing changes in several places were an accident of autoformatting.

There are also some random changes that might fly under the radar - Javascript Number will gladly hold floats, so I made the Number 'type' backed by float in MySQL, while adding explicit Int and Uint types.

Likewise, I made an `options()` function in the image of the `datatype()` function because dealing with all the options in `datatype()` could make object - schema type comparisons fail in `alterTable.changed()`.