Feature: Keys

This PR adds the possibility to capture array offsets and map keys in `filter()`, `map()`, `flatten()`, `peek()`, `each()`, `skip()` and `limit()`.

## Examples

```php
// Results in [2, 3]
Sequence::of([1, 2, 3])
  ->filter(function($e, $offset) { return $offset > 0; })
;

// Results in ['color:=green']
Sequence::of(['color' => 'green'])
  ->map(function($e, $key) { return $key.':='.$e; })
;
```

## BC break
In order for `each()` and `peek()` to be able to keep apart two-arg functions accepting values and keys from two-arg functions with optional second arg, a new optional `$args` parameter is introduced. If passed as an array, the callback is invoked with the element as its first argument - all other arguments in $args are appended.

```php
/* function var_export($expression, $return= false); - see http://php.net/var_export */

Sequence::of([1, 2, 3])->each('var_export');      // No longer produces correct result!
Sequence::of([1, 2, 3])->each('var_export', []);  // Works again
```