Make selectors generic, accepting Matcher type and Matching Object type

This allows to write selectors that are aware of the Matcher type,
and Matching Object type, that will take Matcher and check wether
or not Matching Object is an appropriate match.

This eliminates type checks and casts for the most used use-cases
such as same-type-object selectors:

In case with simple object selector it will be:

     new ObjectSelector<T, T>(obj);

Which means that objects with different types won't be matched.

Regular Expression selector now accepts a Pattern and String, and
there's no need to cast object back to String.