Drop Watcher inheritance and use Watchable module.

There is now a default Watch class that will always load for resources not having a defined Watcher.
Pagelike resources should be discoverable by the directory tree, not by the config file. This makes the config optional.
Use hashmap cache rather than instance vars.

Allows for more variety of resource names (not strict valid character support).
Finding files for the collection needs to honor the actual resource_name, unformatted.
Paginator pages need to be numerical.

This ensures we properly error out of not found pages.
Refactor #acting_as_pages method
Simplify getting collections API to ruhoh.collection(name)
Use observer pattern to handle collection-level logic when child models change/process their data.
Refactor routes to be specific to their collections.

This allows ruhoh.collection('pages').routes for quick inspection.
Refactor ruhoh base cascade paths and collection paths.

Base cascade paths now correctly belong to ruhoh while collection-specific (namespaced) paths are automatically generated within each respective collection.
Use a hash to store file pointers as order is not necessary.
Finding resources now queries the file system and loads a fresh model.

This strategy replaces the 'dictionary' method in which all resources were assumed processed. Processing is now down on an in individual resource basis; caching should be done as an abstraction.
Fix for incorrectly iterating over a hash.
Break long lines (cleanup).
Make sure all cache keys are tokenized/normalized.
Remove collection#process_all in favor of traversing files whenever calling #dictionary.

We drop the cache at the collection level and will add cache invidual models. In this way the dictionary should always represent the latest resources, most of which should be cached but #dictionary doesn't need to care.