Always cache empty results in CachingRegistry

Previously, if there were no registrations, CacingRegistry short
circuit its logic and return an empty list without updating the cache.
This meant that, when there were no registrations, every call to
select would result in an expensive cache miss.

 - Update CachingRegistry to cache results at all times.
 - Improve unit tests to verify caching behaviour.

 Completes #37