Improve snocView implementation.
Improve snocView implementation.

The new implementation isn't tailrecursive and instead
builds up the initial part of the list as it goes.

This improves allocation numbers as we don't build up an intermediate
list just to reverse it later.

This is slightly slower for lists of size <= 3. But in benchmarks
significantly faster for any list above 5 elements, assuming the
majority of the resulting list will be evaluated.

sdiehl/ghc,sdiehl/ghc,sdiehl/ghc,sdiehl/ghc,sdiehl/ghc,sdiehl/ghc,sdiehl/ghc