Catchable "Call to a member function bar() on a non-object"

This pull request turns fatal errors generated from calls to methods on a non-object into E_RECOVERABLE_ERRORs.

## Example

```php
set_error_handler(function($code, $message) {
  var_dump($code, $message);
});

$x= null;
var_dump($x->method());
echo "Alive\n";
```

The above produces the following output:

```
int(4096)
string(50) "Call to a member function method() on a non-object"
NULL
Alive
```

## Reasoning

If you want to run PHP as a webserver itself, fatal errors are problematic. For a long story on why you would want to do that in the first place, see http://marcjschmidt.de/blog/2014/02/08/php-high-performance.html

## Consistency

This behavior is consistent with how type hints work. Framework authors can turn this into exceptions if they wish.

## Further reading
* [RFC: Engine exceptions](https://wiki.php.net/rfc/engine_exceptions) - this PR doesn't go as far as this controversial RFC
* PHP Bugs [46601](https://bugs.php.net/bug.php?id=46601), [51882](https://bugs.php.net/bug.php?id=51882) and [51848](https://bugs.php.net/bug.php?id=51848) - bugs which would be fixed by this
* PHP Bug [54195](https://bugs.php.net/bug.php?id=54195) - related, motivates necessity
* HHVM [throws a `BadMethodCallException`](https://github.com/facebook/hhvm/blob/master/hphp/test/quick/method-non-object.php.expectf) in [these situations](https://github.com/facebook/hhvm/blob/master/hphp/test/quick/method-non-object.php) - can be done by implementing an error handler as seen [here](https://github.com/thekid/php-src/blob/51a5e184335373e0bcfd6c65fdb22c6908768a83/Zend/tests/methods-on-non-objects-throw.phpt)
Using the following didn't work for me:

```diff
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 42d3f60..628db06 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2477,7 +2477,6 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|TMP
                /* No exception raised: Skip over arguments until fcall opcode with correct
                 * nesting level. Return NULL (except when return value unused) */
                do {
-                       ZEND_VM_INC_OPCODE();
                        opline++;
                } while (opline->opcode == ZEND_DO_FCALL_BY_NAME ? opline->op2.num > nesting :

@@ -2488,10 +2487,10 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|T
                }

                if ((opline + 1)->opcode == ZEND_EXT_FCALL_END) {
-                       ZEND_VM_INC_OPCODE();
+                       opline++;
                }

-               CHECK_EXCEPTION();
+               SAVE_OPLINE();
                ZEND_VM_NEXT_OPCODE();
        }
```

The `SAVE_OPLINE()` macro only sets `EX(opline)` whereas `ZEND_VM_INC_OPCODE();` affects `OPLINE` which is authorative for the executor AFAIS. 

Seems `ZEND_VM_SET_OPCODE()` might be what I'm looking for.