Arr::get work with ArrayAccess and NULL values

Passing `NULL` as first argument would return the default.

Passing something else than `array` or instance of `ArrayAccess` would throw an exception.

Using `isset()` for performance reasons.

Using `array_key_exists()` for arrays and `ArrayAccess::offsetExists()` otherwise.