Add metadata for global cache entries
Setup proper type info for Numeric and Integer
Create smarter kind_of checks

If we can reuse the cached constant since it's referred static in the
code, we can create a quick check for the cases that the kind_of type
check succeeds and finds the correct type.

To optimize for VM types, it makes the assumption that inherited classes
from VM types will always use the VM type layout. The only way to hack
around this at the moment is manually changing a class for an object
with Rubinius::Unsafe.set_class. Since that explicitly is an unsafe
operation, this optimization doesn't break normal usage.
Move type checks up front for common cases

These cases are hit often in Rails apps (FFI due to Socket).