Update guard to reload when the gemspec changes
[WIP] Add basic types for spike to work out a nice API

* This should not be merged into master as-is. This is mainly being
  committed so that the basic API design can be finalized before
  progressing too far in the wrong direction.
Add TODO note for future development
Add more constraint ideas to TODO
Add note about using real predicates for the constraints
Add note about using finalization to replace constraints w/predicates
Replace adamantium with ice_nine

* Currently adamantium isn't being used by the library, while
  ice_nine is.
Fix code to work with BasicObject descendants

* In Ruby 1.9 BasicObject is the top-most object, and it does not
  have #kind_of? so we use BasicObject#=== instead.
Add Virtus::Types.finalize to finalize all the types
Rename constant to be more clear
Add respond_to? test for constraints

* This allows the constraint to work with other types and not raise
  a NoMethodError, but rather return false like it is supposed to.
Change Object#include? to a constraint setup in the finalizer
Change Type.constraint to not accept a nil value
Add TODO note for future possible performance improvement
Update error message to be more clear
Remove unnecessary freeze

* The type will be deep frozen during finalization, so it's fine
  to not freeze here. Plus freezing the local variable is
  unnecessary.
Update constant to be more clear of it's purpose
Update gem dependencies

* Add backports as an explicit runtime dependency since this code
  makes use of 1.9 core lib features.
* Remove equalizer since it is not being used (yet).
* Add development dependencies to gemspec. While they are specified
  in the Gemfile, I prefer for runtime and development dependencies
  required to run the specs and generate docs to be in the gemspec.
Update #finalize methods to be idempotent

* The finalize methods sometimes update the type state, but once
  the type has been finalized the work should not be repeated. When
  the type has been frozen it is an indication it has been finalized.
Refactor singleton method creation to use Object#define_singleton_method