Add ImmutableInterlocked.ApplyChange method and tests.

Interlocked.CompareExchange leaves quite a bit of insight into the runtime and threading requirements to the programmer when it comes to lock-free mutations of immutable collections.
The ImmutableInterlocked.ApplyChange method makes such lock-free mutations trivial:

    // Add "2" to the list in this.field in a thread-safe, lock-free manner.
    ImmutableInterlocked.ApplyChange(ref this.field, list => list.Add(2));