Return types

This is a pull request to implement the return type RFC: https://wiki.php.net/rfc/returntypehinting

Presently not ready for merge (there are a few bug fixes still needed).
As you might have expected, this does not work correctly. I had forgotten that a generator could return early by calling `return;`

I'll work on fixing this.