Split higher order methods into separate headers
* `foldr` is the base of many other higher order methods and as such gets its own header
** `foldl` requires both `foldr` and the special purpose `reverse` method and as such belongs into `misc.h`
* `any`, `none`, `all` and `count` are all higher order method for checking the appliability of a functor against lists
* this was done to increase the separation of concerns and as such make the dependencies of higher order methods more obvious