Fix for Razor #84 - Optimize GetSourceLocation

GetSourceLocation is frequently called to determine the location mappings
between the original document and the generated code.

The old implementation did a number of ToString and replace operations to
simplify the math on tracking the position - which put it front and center
in our performance measurements - about 25% of all execution time in a
sampling profile of our perf test.

The new code tracks position as code is written, and avoids allocations.
After these changes GetSourceLocation doesn't show up in the profile.
Per conversation with @NTaylorMullen - he's unaware of any case where we currently do this **today**. However this worked under the old regime, and it would be really surprising if doing `writer.Write("\r"); writer.Write("\n");` suddenly broke all of our design-time code. Added tests for this case.