Add "simpleSource", which allocates less during pushback.

The idea behind "simpleSource" is that rather than "withDefaultPushback", which
wraps a recursive call to itself through the pushback continuation (thereby
allocating a new Source record for each pushback), if the produce function
never changes then we can reuse the same Source record forever if we keep an
explicit pushback buffer.

This reduces the amount of alloc done by pushback by nearly 3x in my recent
profiling.