Fast generics

Add `implementGenerics` method to shell, which is the same as `implement`, but the methods can be in a generic form, so `function(self, arg1, arg2, ...)`.

Using this form, the common case, where the methods are used as generics, `array.each(arr, fn)`, is optimized, so not wrapped, as it used to be with the `implement` case.