Smart coallescing

Tries to predict the value of variables (whether they are null or not).
This is missing lots of features (just search for "TODO" or "NotImplementedException" and you'll see what I mean), but it's ready for feedback.
In the future, I'd like to add support for Linq queries and string.IsNullOrEmpty.

This introduces over 1000 lines and it's not even as complete as I'd like it to be.
```csharp
if (x == null) {
   //x is known to be null here
   x = "";
}
//x is known to be not-null here
```