Add optional matching argument to first()

This PR adds an optional parameter to `Sequence::first()` to match:

```php
Sequence::of([1, 2, 3])->first()->get();  // 1
Sequence::of([1, 2, 3])->first(function($e) { return $e % 2 === 0; })->get();  // 2
```