added a crude cache for NSDataDetectors to avoid crashes with too many data detectors being used