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.

unit tests for new Arr::get()

Signed-off-by: Haralan Dobrev <hkdobrev@gmail.com>

Slightly better performance for Arr::get()

If the check with `isset()` is moved to the top the functionality would be the same.

But when the first argument is and the key is present and the value is not NULL, which is perhaps the most common case, there would be 3 checks less.
Merge branch 'patch-3' of git://github.com/hkdobrev/core into 3.4/feature/arr_get-work-with-arrayaccess-and-null-values

Merged Merge branch 'patch-3' of git://github.com/hkdobrev/core into
3.4/feature/arr_get-work-with-arrayaccess-and-null-values with
modifications:

- Passing `NULL` as first argument would NOT return the default.
Also removed related tests

- Passing something else than `array` or instance of ArrayAccess
would NOT throw an exception. We leave that on the PHP runtime
to take care instead. Also removed related tests.

- Removed HHVM workaround message, HHVM is now compatible with PHP
starting HHVM v.3.3.0

Conflicts:
	classes/Kohana/Arr.php
Merge pull request #570 from kohana/3.4/feature/arr_get-work-with-arrayaccess

Arr::get overhaul