Added `foldable` version of folds

I finally managed to get these to run as quickly as the original
list-specialized folds on my machine.
Simplified implementation of `fold` and `foldable`
Completed switch to `Foldable` folds

Experiments with `pipes` showed the exact same improvement in fusion after
implementing functions directly in terms of `Data.Foldable.foldr` so this seems
to be a pretty reliable phenomenon.