Avoid creating so many temporary strings when normalizing
Trying to create buffer lazily doesn't quite work
Re-implement buffer to be byte-based
Cuts down on raw number of temporary strings in use