Changes in v3.13

*****
This version of NCrunch introduces changes to the grid protocol. This means that grid node servers
must be updated before they can be used with the new version.
*****


------------------------------------
NEW FEATURES
------------------------------------

Introduced 'Endless Churn Mode', an option available from the NCrunch main menu. When placed in this mode, NCrunch will cycle tests through the
processing queue endlessly, but will avoid re-executing any tests that fail. The purpose of this mode is to allow NCrunch to be run overnight
on complex solutions to try and surface intermittently failing tests, which very often become a problem over time. When in churn mode, tests
will be executed in a random sequence and through randomly recycled test processes to try and increase the chance of finding test failures that
may be dependent on execution sequence.

Introduced a targeted form of Endless Churn Mode that is applied to specific tests, rather than the entire solution. When using this mode,
individual tests or groups of tests can be targeted to be 'churned' until they fail. This is very useful for troubleshooting tests that produce
intermittent pass/fail results.

Made significant improvements to the mouse-over behaviour of the NCrunch corner spinner. Instead of popping up a tooltip, this spinner will now
open a popup window giving much more detailed information about the state of the NCrunch engine.

Added a metric to the new status popup window that shows the current load on the NCrunch core engine thread. This thread is responsible for
handling the execution of most of NCrunch's internal code, so it's a useful way to know if the engine is having trouble keeping up with the
demands of updating the UI and orchestrating background test/build tasks. When the engine core becomes overloaded (~100% utilisation) the
NCrunch engine will feel less responsive to requests from the UI.

Completely replaced the coverage marker and exception marker tooltips with new popup windows giving much more detailed information.

Added an advanced option to reset the status of a test.

Improved our integration with newer versions of Team City. We now record the NCrunch compilation errors and warnings. Tests inside a fixture are
now reported together and the fixture setup is now reported in a test called *.Fixture. NCrunch logging (if enabled) now no longer has duplicate
timestamps, but uses Team City's offset timestamps, this allows for better reporting across time zones.

NCrunch will now enforce test timeouts using Process.Kill when Thread.Abort fails to successfully abort the test. In doing so, NCrunch will
first try to use Thread.Abort (where possible), then fall back to killing the process if the test execution doesn't complete within 5 seconds.
This should significantly reduce the risk of test runs hanging due to tests timing out.


------------------------------------
FIXES AND COMPATIBILITY IMPROVEMENTS
------------------------------------

Fixed an issue where the MSTest adapter would throw an exception when attempting to run a fixture with brackets in its name.

Significantly restructured NCrunch's handling of MSTest DataRow tests so that data row parameters are now passed through a generic serializer.
This should resolve a range of compatibility problems associated with these tests.

Fixed a hole in NCrunch's support for MSTest V2 DataRows containing runtime types as parameters to be fed into the test. Note that to enable
this use case to work, you will need to change your MSTest framework utilisation type to DynamicAnalysis.

Fixed an issue where it was possible to configure the NCrunch client to connect to the same grid node twice along parallel connections. This
caused the client to become confused between the duplicate connections, resulting in instability.

Fixed an issue where sometimes an unexpectedly disconnected client connection could cause a grid node to hang and stop requesting work from
all connected clients.

Fixed an issue where Nuget packages transferred from grid clients to servers would be re-transferred on every connection, until the grid node
was restarted.

Adjusted NCrunch's creation of UI markers so that this only happens when it needs to, instead of every time the WPF layout is changed. This
should reduce the load of the markers on the UI thread.

Fixed an issue where ignoring a test would temporarily clear its entry point.

Added a file search fallback for when sn.exe can't be found via the Windows Registry when trying to sign instrumented assemblies.

Fixed a UI slowdown when tests with very long names were being rendered.

Fixed an issue that could cause rare intermittent NullReferenceExceptions in NCrunch's code coverage tracking.

Fixed an issue with Visual Studio 15.6 and ASP.NET Core where the projects wouldn't build

Deactivated NCrunch's enforcement of the 259 character file path limit when the LongPathsEnabled registry setting is turned on. Note that
using paths longer than 259 characters is still not recommended, as much of the tool stack does not yet support this.

Fixed a race condition that could very rarely cause the test runner process to bug out with an exception.

Fixed an issue that was causing test trace output to be replaced with trace output from runs of the same test that were reported later but run
with older versions of the source code. This could cause the test's trace output to become desynchronised from the rest of its results in
rare scenarios.

Rewired NCrunch's timeout handling to improve stability.

Added a fix to properly enforce timeouts under dotnet core and NUnit3 using NCrunch's timeout attribute.

Fixed a race condition that could cause the NCrunch console tool to think that all work was done if running in grid-only mode and grid nodes
were still being connected right after initialisation of the engine.

Added an automatic retry system for the upload of files to grid nodes. When the client is unable to upload a file, the system will retry for
3 seconds before giving up and reporting the problem.

Adjusted the grid connection system so that NCrunch will only attempt to connect to grid nodes after all projects have been loaded on the
client. This is to reduce the risk of the connection timing out while the client is loading projects over a large solution, which can
reduce startup efficiency and unnecessarily consume resources on the grid nodes.

Strengthened NCrunch's handling of OutOfMemory exceptions occurring during test execution.

Cleaned up the handling of automatic SpecFlow targets inclusion when referencing SpecFlow using PackageReference. Instead of trying to inline
specflow into the NCrunch workspace, it will now be referenced from the nuget packages directory.

Introduced a warning when a complex version selector is used in the DotNetCliToolReference. NCrunch only supports wildcards.

Fixed a bug where using a wildcard (*) in the DotNetCliToolReference version field wouldn't work with NCrunch, this now defaults to the most
recent version.

Fixed a bug when replacing environment variables under a path that was separated with a directory separator.

Added a warning when building a netcore/standard project on a grid node under the local system account.

Adjusted garbage collection so that this will run after a tests runs out of memory, to improve the chance of NCrunch returning a sensible
result from the test run.

Fixed an issue where copying the trace ouput from the test window could crash VS.

Added a script inside the zip file distribution of NCrunch that unblocks all the downloaded files.