Parameterized With method now can return "this"

This is a GC pressure enhancement. If no net changes are made to an
object via the With() method, the same object is returned rather than a
new one.
Builders now rely on immutable objects for invalidation.
ToImmutable() now updates its basis to save allocations.
Merge remote-tracking branch 'origin/master' into PropertiesAreBuilders9

Conflicts:
	ImmutableObjectGraph.Tests/Person.generated.cs
	ImmutableObjectGraph.Tests/PersonBuilderTests.cs
Adds test for setting Builder properties to null.