Further optimisations to spatially-aware FIS
- now caches a hash of the categories in an item-set, and a map from categories to annotations
- also only checks first / random element of prior extension set matches new candidate