[Reviewer: Andy] Fix up contact filtering issues

This fixes up the issues causing https://github.com/Metaswitch/sprout/issues/716 and https://github.com/Metaswitch/sprout/issues/685 - specifically, it treats unvalued parameters as having a value of "TRUE", ignores quotes, and allows per-token negation. I've also fleshed out the debug logging, though only in an ad-hoc way so I can track down issues.

I haven't added SAS logs, or done any checking to ensure that we only filter on valid tags (ones beginning "+sip." or in the set defined by the RFC).

It would be particularly good to get a review of my UT changes, to make sure our understandings of the specs agree.

Tested in UT and by bulking out the live tests - pull request there to follow.
As discussed, the Accept-Contact predicate P and Contact predicate Q match if some feature collection x exists such that P(x) and Q(x) both evaluate to true. If there's no overlap (e.g. P(x) only evaluates to true for INVITEs and Q(x) only evaluates to true for OPTIONS), then no such feature collection x exists and the return value is NO.