Revert "Rewrite operation_match_requirements"

This reverts commit 6112e819f06d6abdb68b1c0997a8b7d6db0a9a9c.

It was not so buggy after all.

There's a difference between:

<require><key name="foo"/></require>

and

<require><key name="foo">.+</key></require>

The difference is when the media doesn't contain "foo" key. In the
former, the source stops at that entry requesting the core it needs the
"foo" key to continue.

In the second case, it just check if "foo" contains matches the value.
If there is not value in "foo" it assumes an empty string. So if it
doesn't match, it continues with the next resolve.

So basically it makes the "foo" requirement a soft requirement.