Wrote MonadFilter class.

MonadFilter is a special case of MonadPlus whose values can be checked
for iszero even in the absence of an Eq-instance. This allows one to
detect monadic zeros regardless of the wrapped type.
Refactored FunctionGraph.hs

FunctionGraph:

* Removed ThreeSplitter, FourSplitter, etc. pp.
* Employed the new MonadFilter class for ParPipes.
* Changed the type of ParPipe to [(a,b)] -> m [(a, m c)]. A history of
changes is maintained via a, allowing the pairing of inputs and outputs.
This was an issue with sorting functions and the like, whose outputs
were incorrectly matched with their inputs.
* Added failIfEither - a variant of failIf which allows the addition of
an error message in case of failure.
* added liftPar'.

Renaming:

* Switched from IO to EitherT String IO throughout.
* Added flattenEt, mkEitherT, isRightT, fromRightT, isRight, fromRight.
* added addInfoG, renamed addInfo into addInfoM.
* added the ParPipe filterSpecialFiles for a clean filtering-out of
special, non-renameable files (e.g. "." and "..").
* applyRenamings now filters out special files.
* applyRenamings no longer checks whether the new and the old filename
are equal.
Added sortByDate-pipe to Main.