Search Caching

Fixes #18.

The search function now hashes the collection name and stores it as the containerID, allowing the system to check if the search has already been executed and just redirect to that page, instead of recreating the search.
Wouldn't it make more sense to just have the cache key generated by the model like you are doing the collection name? Model.GenerateCacheKey()