Remove ImmutableArrayInterop and work around it

The public ImmutableArrayInterop class has been deemed too dangerous
to be out there for general use.

Remove it and implement a byte[] only version internally in the
metadata reader using an unverifiable union.

Retain the documentation and add a warning to anyone thinking about
reusing the code to do likewise.
Merge pull request #196 from nguerrera/internalize-unsafe-interop

Remove ImmutableArrayInterop and work around it
Update buildtools reference to 1.0.15-prerelease
Enabling innerloop dataflow tests
Merge pull request #198 from FiveTimesTheFun/buildtools-15

Update buildtools reference to 1.0.15-prerelease
Merge pull request #197 from Priya91/enableddataflowtests

Enabling innerloop dataflow tests
Add thread-safety test for ImmutableArray`1.Add

Repro for issue found in #191
Add more comments to thread-safety test.
Fixes thread-safety vulnerability in ImmutableArray<T>.

Any member that references 'this' more than once is vulnerable to in-place replacements of the value of the struct from another thread. That pretty much defeats the thread-safety guarantee of ImmutableArray<T>. So the fix is to make sure we dereference this (to get the array) exactly once per public entrypoint so that the array instance we access is the same every time.

An example of the problem is we can capture the length of the array, and then copy from the array. But in between those two steps another thread updated the field that contained this struct, so while our method is still running, the instance of the array actually *changed*, so the length of the array changed with it, and we throw an exception because we tried to read beyond the bounds of the array.

It turns out this demonstrates a very compelling reason to prefix *all* instance member access with "this." (not only fields, but properties and methods too!) because it made auditing and fixing this class much easier since I just had to look for any member that referenced 'this' more than once and could use search and replace to change them all to 'self'.

Fixes #191
Turn on _enableOffering in TryReceiveAll as in TryReceive

In SourceCore TryReceive turns on enableOffering to offer the next messages to any target (if there is one) while TryReceiveAll didn't.

Fix #202
Document required self=this coding pattern.

Also fixed formatting of test method.
Merge pull request #200 from AArnott/Issue191

Fix thread-safety vulnerability in ImmutableArray<T>

Fixes #191
Add Test Explorer VS package Service guid.

Every time the Dataflow solution opens (and Test Explorer is used) VS2013 adds this tag to the project. Just concede to the IDE and allow it to be added to the project and check into SCC so that the project doesn't get constantly dirtied by the IDE.

It appears this tag already is in all the other test projects. This recently added test project had not yet been 'tainted', so this takes care of that.
Merge pull request #204 from AArnott/DataflowTestsServiceGuid

Add Test Explorer VS package Service guid.
Merge branch 'master' into BufferBlockBug
Set _enableOffering unconditionaly
Enhance TestBufferBlockOutputAvailableAsyncAfterTryReceiveAll by testing multiple times concurrently
Use invariant culture for converting XPath objects in tests

Before, a call to Convert.ChangeType() in the XPath tests used the current culture,
which resulted in test failures on cultures like de-AT and on Windows 10.
Instead, we now use the invariant culture when converting objects to fix this.

Fixes #136
Remove allocations in ImmutableArray.RemoveAll/ImmutableList.FindAll

ImmutableArray<T>.RemoveAll and ImmutableList<T>.FindAll both unconditionally allocate an object (a list or a builder) to store the results of iterating over the collection and running the supplied predicate.  However, if the predicate never returns true, these objects aren't needed.  This commit simply changes the allocation of that object to be lazy such that it's only allocated if needed.
Merge pull request #205 from akoeplinger/fix-xpath-tests

Use invariant culture for converting XPath objects in tests