Porting razorpage perf improvements from codeplex-2119

These changes were worth 2-3% of execution time on a page that makes heavy
use of attribute writing.

Making the overloads for writing a string public should show a small
throughput increase for a typical razor page.
Any reason why we shouldn't do `!string.IsNullOrEmpty(value)`?