Add minimal support for lazy evaluation to chaining syntax #274

These are methods that currently support lazy evaluation: `map`, `filter`, `reverse`, `drop`, `dropWhile`, `dropRight`, `dropRightWhile`, `take`, `takeWhile`, `takeRight`, `takeRightWhile`, `first`, `last`, `initial`, `rest`, `value`.

They're implemented into chain syntax.

* There is no documentation yet
* It doesn't pass tests for RingoJS, Rhino, etc... builds yet
These methods are *all* destructive:

```javascript
var seq = _([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).filter(function(x) { return x % 2 == 0; });
seq.take(2).value(); // => [2, 4]
seq.value(); // => [2, 4]
```

My feeling is that, in places where you have `this.iterators.push`, `this.type.push`, etc. you should probably be creating new `LazySequence`s with `concat`. My two cents, anyway.