Avoid use of Peek where possible

Hopefully this is all fairly uncontroversial as far as speed is concern, as it doesn't change any code path except to remove calls to Peek. i.e. by changing the ConsumeWhiteSpace to return the last char that it has checked, and then to use that in following functions. This is all very invasive, so would be very painful to create speedchecks around. Anyway; running the pre and post Benchmark suite I get across the board improvement, will well over 5% time reduction for lists and dictionaries.