Previously, value conversions were made on the original value, and thus,
calling methods like `Value.Int` had the side-effect of changing the
value's type for subsequent calls to `Value.Interface`. Any conversion
required happens on value copies, which are automatically destroyed
after use.
Expressions executed in the `Context.Eval` method can now return a
value, which will be passed to the Go caller, and can be used as a
regular Go value.
Call order is now enforced when using the root `php` package by moving
the `NewContext` function in the `engine` package, as a method of the
`Engine` method receiver. Further clean-ups have been made to the code
as a result of this change.