Correct pattern evaluation semantics

In order to be consistent in the presence of generics on a signature,
the patterns must be evaluated every time the method is called. The
interpreter has been updated to reflect this, tidying up parts as well.
Types have been temporarily downgraded to adjust: they do not evaluate
the patterns in their signatures, and just test if an object has the
required method names. The runtime signatures have been removed.

An additional test that ensures types cannot have duplicate method names
has also been added.