Updating Foldables

Added fold and foldMap, and also changed foldr to be defined in terms of foldMap.  This won't break any existing code, but it'll offer some more flexibility in the future as to how to define a foldable.  Also added foldrM and foldlM