Refactored tests for 'foreach' statement in PHP grammar to include descriptions in test names
Fixed issue with variable declarations being hoisted, whereas in PHP variables and array elements should be defined on assignment:

- Fixed issue with implied arrays where element is assigned to, variable is declared with explicit assignment but has the value null
- Added support for unpacking arrays with list(...) in foreach
- Fixed slight issue with "Undefined variable" error message incorrectly containing the "$"
- Refactored to avoid passing ScopeChain dependency in to PHP Value object methods at call time, instead injecting via constructors