matchMetadata for examining metadata when defining rules

Someone else on the mailing list asked last month about using metadata to decide whether or not to compile something when defining `Rules`. This capability would solve a problem for me, too.

I realized all of the tools were already there in the form of the `getAllMetadata` function on the `MonadMetadata` typeclass. This PR just creates an alternative to `match` that also takes a predicate on metadata.