Add FeatureDetector caching.

Implements #36 
What required us to re-implement both this and the object hash?