Refactoring round-up

* Got rid of init_from_hal methods and introduced the HR::Adapter interface, and HR::Adapter::HAL_JSON.
* Ditched define_singleton_method in favor of proper subclass creation and method_missing fallback.  Now HR objects are cacheable.
* Cleaned up subclassing logic considerably.