Added init and tail methods.

first and last have behavior different from clojure/haskell. They do in fact take arguments.

`Range(1,10).first(x => x % 2)` returns "2" and not "1". The predicate is optional because excluding it results in the behavior of clojure/haskell.

The same behavior doesn't make sense for rest/butLast.

Regardless, the type signatures need to match the implementation :)