PRX-30: Add pxs tests for v2 psr
Add a `psr-tests\_2` directory for a v2-specific copy of the PSR tests.
I've decided to copy the test suite because the v2 version of the PSR looks sufficiently different for test code not to be compatible with just some symbol-shuffling.
The replacement for the "SI" struct is based on namespaces and consequently no longer supports the `call\member` trick to access its functions dynamically.
The v2 tests have their own `testconfig.txt` because they don't need an external mechanism for their dependencies. They instead rely on the self-assembling build plan mechanism (`references` and `name` meta entries). Consequently, the v2 `testconfig.txt` format is massively simplified, containing only the test suite file name and list of test cases.
The v2 `run_tests.pxs` is re-written from scratch because loading the test suite via the build plan works fundamentally differently than the hacked-together manual compilation of the v1 `run_tests.pxs`. The v2 variant scans the file system for ``*.test.pxs` and loads them in parallel.
Test execution of multiple test suites (isolated application compounds) could in theory be done in parallel as well, but for now, v2 tests are still executed serially.
TODO:
- migrate test suites for macro and prop
Also
* Use a pool of build engines in a build plan (instead of re-using the engine supplied in loader options). As part of this change, the `IBuildEnvironment` becomes `IDisposable`. This is a BREAKING change. Fixes PRX-42
* expose timer, console, self-assembling build plan, benchmark commands under the new `prx.cli.{timer,host,benchmark}` namespaces.
* expose Prx-specific commands to the compilation engine of the self-assembling build plan. This means you can compile applications that access `prx.cli.host.self_assembling_build_plan`
* Add `flat_map` command (to both Prexonite v1 and v2, under `sys.seq.flat_map`.
* Add `test\diagnostics` / `psr.test.diagnostics` flag for debug output from the test framework
* Add `psr.test.run_tests_in_app` function (v2 only) to run tests in a particular application compound (not necessarily the current one)
* Fix mistyped namespace in `macro.pxs`
* Extend `psr\test.pxs` to run all tests in the entire compound, not just the application that contains the `test.pxs` code. This is irrelevant to v1 code, but essential to use `psr::test` in v2 code.
* Include module name in Prexonite exception stack traces
* Add `Prexonite.Compiler.Cil.Compiler.CompileModulesAsync` method family to perform CIL compilation for a set of modules and all of their dependencies.
* Make `ITargetDescription` implement `IDependent<ModuleName>` (not breaking for languages that support default implementations of interface members).
* Extend `IPlan` with a single module overload of `BuildAsync` and a multi-module overload for `LoadAsync` to complete the symmetry.