Reviewer Rob - Contact filtering

This is the code for the contact filtering function.

I've UT'd everything but `filter_bindings_to_targets`, `binding_to_target` and `prune_targets` but the golden paths through them are already UTd by the existing UTs.  I'll add error paths while you review the rest.
matcher.second.empty()? (Presumably Feature is a typedef for std::pair<name, value>, but it would be nice to make it a struct so we could have matcher.value.empty()).