Update Foldable instance and folding functions

How do you feel about this branch? Now that we have a Foldable instance I thought it would be a good idea to write functions in terms of it when possible.

Benchmarking on my computer tends to produce different results each time, but I don't see a change in relation to other containers between runs.

before:
![fold-before](https://f.cloud.github.com/assets/89937/556854/63187ed4-c3e3-11e2-8df7-bc0c67afc425.png)
![elems-before](https://f.cloud.github.com/assets/89937/556881/d5781458-c3e3-11e2-89df-f9c0b998cf13.png)


after:
![fold-after](https://f.cloud.github.com/assets/89937/556856/6b46203e-c3e3-11e2-9330-321df927ac8b.png)
![elems-after](https://f.cloud.github.com/assets/89937/556883/e2375500-c3e3-11e2-954e-6df31699c589.png)