Enable matching array keys against constraints

Array keys may now be matched against all string (starts/ends with, contains, PCRE) and numeric matchers (is null, greater than, less than).

This introduces two new interfaces (StringConstraint and NumericConstraint), which could be replaced with one interface ArrayKeyConstraint if that is more feasible.