reduce the cost of GC::Profiler.total_time

This isn't a comprehensive fix, but it'll do in the interim.
use clock_gettime if available. thanks @tmm1
Revert "reduce the cost of GC::Profiler.total_time"

This reverts commit 2d9a08f4208b11222666b449669bf51c0f4b01d0.
Add GC::BasicProfiler

This is the beginning of a basic gc profiler that has less overhead and
memory footprint than GC::Profiler. More to come.
make gc_profile_enable_get correctly return a ruby boolean
zero GC::BasicProfiler stats on disable

Thanks @josephruscio for the feedback.
copy and paste comment failure
ghetto: switch the patchlevel to a real one

because otherwise the ruby_core_source gem doesn't work
expose method cache invalidation count
this VALUE isn't being used as a pointer, so it needs converting
Add more method cache stats.

Everything is now under RubyVM::MethodCache:

  - RubyVM::MethodCache.invalidations
  - RubyVM::MethodCache.hits
  - RubyVM::MethodCache.misses
  - RubyVM::MethodCache.miss_time (milliseconds)
Add a way to trace method cache invalidations.

Set RubyVM::MethodCache.invalidation_log to something that responds to
Fix incompatible pointer assignment.
Implement per-class method caches.
remove stuff about the global method cache
the very very basics of subclass tracking
rename that
turns out we don't need both links I don't think
I think this will do what we really want
subclass tracking. thanks to charlie sommerville for a lot of the implementation :-)