Tormenta refactor

I attempted to clarify what we do in tormenta in classes better:

We have three core items

SpoutProvider ultimately to provide a getSpout function, has both a getSpout and getSpout(schemeTransformer)

SchemeTransformer, really just a wrapper on a T => TraversableOnce[U]. But the abstraction makes it easier to use in things like the Twitter spout that come with a type other than Array[Byte], and the TraversableSpout.

The Scheme, I didn't touch this, but this is the raw decoding Array[Byte] => T decoding abstraction of Tormenta. It fits nicely into the provided storm spouts.

can you add some comments here as to what fn was doing? Previously, while extending Spout[T], it was clearer.

Why is the fn here? It seems like a bolted on flatMap which should really just be the .flatMap function on SpoutProvider? Why not wrap this is the SpoutProvider above?

Why are they separate?