Add parameter and generics checks to type match

Running match (and assert) on a type will now also check that the
requisite number of standard and generics parameters are present. This
takes into account variadic arguments and that generic parameters may be
ignored, so all an object needs to do to fulfill a type is guarantee
that it will not raise an error about incorrect argument counts for
either parameter form. The built-in types have been updated to include
this information.

As a result of this change, the String type has been updated to include
both the Pattern and List types, and the implementation has been updated
accordingly. The implementaion of the do() method in the List
constructor has been updated to reflect the actual type of the method.
The Task.each method can now iterate through strings, as well as through
lists or over a number.