Changes in v2.21

*****
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.
*****

Rewired the engine initialiser so that this now uses the engine's background execution threads to load
projects on startup. The effect of this is limited in situations where the IDE is still opening a
solution, as NCrunch is unable to load projects any faster than VS reports them ... However, this
change has greatly reduced engine startup times during reset operations and when starting the engine
on solutions that are already open.

Extended NCrunch's asynchronous loading of projects to also perform other initialisation tasks (such
as indexing code coverage) asynchronously. This should greatly improve initialisation performance on
large solutions with high code coverage density.

Fixed corner spinner not correctly aligned in VS2015 Update 2.

Fixed xUnit v1 theory tests not having their entry point recognised by NCrunch (regression in v2.20).

Fixed an issue that could intermittently cause loss of cache file data during initialisation of the
engine.

Fixed an issue that was causing visual code coverage data to become corrupted inside the IDE editor
window after certain rare combinations of changes had been made to the source file.

Fixed possible IDE lockup sometimes occurring when a solution is first opened or created.

Fixed test entry markers overriding/hiding exception crosses.

Fixed an issue that was occasionally causing visual corruption of the NCrunch spinner during
initialisation.

Added inline documentation to NCrunch.Framework.

Fixed an issue where MSBuild expressions dependent upon certain global properties (such as
SolutionDir) could fail during load of the project depending upon MSBuild's evaluation sequence.

Fixed corner spinner not properly considering test tasks that are removed from the queue but still
processing in the background.

Fixed hyperlinks being cut up by text wrapping in the Tests Window.

Fixed noise exceptions caused by NCrunch trying to interpret Nuget editor windows.

Fixed generic test methods not having their entry point correctly recognised in certain scenarios.

Fixed an issue that made it possible to distort expected test execution times by running tests with a
debugger then detaching before the test finished its execution.

Fixed a text selection issue in the Tests Window text output pane where it was impossible to select
the last character of a line without also selecting the line break after it.

Cleaned up the handling of source and content file encoding detection, particularly around distributed
processing.

Fixed an issue that was preventing NCrunch from correctly detecting the encoding of BOM-less UTF8 files
that were open in the IDE.

Fixed an internal issue that could cause code coverage inconsistencies in rare scenarios.

Adjusted the XML report writer to strip out control characters from exception text, as this seems to
cause problems with some XML readers.