Add FeatureDetector caching.

Implements #36 
When overriding exceptions, `super` must be called within `__init__` (pass in `message`).