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.
I also wrote the code for the generalized *newline-length-of-n* version of this code and it's far more complex. Basically it doesn't seem worth the maintenance cost/shock-factor. If we need to run in an environment with `NewLine.Length > 2` all kinds of stuff will be broken.

So I just simplified it.