add ability to use array keys with array_filter()

This adds a third (optional) argument to `array_filter()` that will determine what gets passed to the callback, the array key, value or both.

````
    array_filter(array(1 => 'a', 2 => 'b', a' => 1, 'b' => 2), 'is_numeric', ARRAY_FILTER_USE_KEY);
    // returns: [1 => 'a', 2 => 'b']

    array_filter(array(1 => 'a', 2 => 'b', a' => 1, 'b' => 2), 'is_numeric');
    // returns: ['a' => 1, 'b' => 2]

    array_filter(array(1 => 'a', 2 => 'b', a' => 1, 'b' => 2), function($value, $key) {
        return is_numeric($key) && $value == 'b';
    }, ARRAY_FILTER_USE_BOTH);
    // returns: [2 => 'b']

```