Axiom types refactor

This branch will include a refactoring of axiom to use axiom-types.

* [x] Remove unnecessary `DEFAULT_SIZE` constants since the types use the defaults from axiom-types anyway
* [x] Move static `#type` methods to become class methods, and have `#type` delegate to it
* [x] Remove `Axiom::Attribute::Date#range`
* [x] Remove `Axiom::Attribute::DateTime#range`
* [x] Remove `Axiom::Attribute::Time#range`
* [x] Rename options to `Axiom::Attribute::String` constructor to be `:minimum_length` and `:maximum_length` instead of `:min_length` and `:max_length`
* [x] Update `Axiom::Attribute::String` constructor to only create a custom type only if the `:minimum_length` or `:maximum_length` options are specified
* [x] Update `Axiom::Attribute::Numeric` constructor to only create a custom type if a `:size` option is specified
* [x] Remove the `@options` ivar from `Axiom::Attribute`. Descendants should pull what they need from the options and store an explicit ivar
* [x] Add a method to axiom-types where given two types we can find the most common ancestor, for example: `type.common_ancestor(other)`.
* [x] Use `Axiom::Types::Type#common_ancestor` to return the best type from `Axiom::Function::Numeric::Binary#type`
* [x] Audit diff to make sure `@example` YARD docs, and others, were not accidentally removed during the conversion
* [x] Ready for review
* [x] Squash commits