minor tweaks mainly for the Sweeper

using some templates and typedefs to shorten a few lines and make the sweeper easier to derive from
The purpose of `predict` is to compute a "provisional" solution using a low order time-stepper.  Kind of like what you have in a predictor/corrector scheme.  The "spreading" terminology is something that I made up (I think it was me!) in `libpfasst` -- it is a fairly handy construct for MLSDC/PFASST when doing restriction/interpolation during the first iteration, but in vanilla SDC it makes sense (mathematically) to do a `predict` sweep followed by several `sweeps` -- especially when you have time-dependent boundaries and/or forcing going on.  Anyway, I think it would be best to avoid the term "spread" in this documentation in favour of something like "compute low-order provisional solution".

Also, this isn't a Crank-Nicolson, so I would remove that reference in favour of something like "carries out several forward/backward Euler IMEX steps between nodes".