Improve Catalog

* Reduces number of queries needed to calculate the available items (cart date changes now lie in the 800-900 ms range)
* Only refreshes the catalog listings page and not the paginating code, resolving #531 
* Refactor pagination code to make it more readable

That's very odd, although [further down the page](http://dochub.io/#html2) it seems to indicate that html() does replace when given an argument...

In the meantime it looks like a commit got missed somewhere, as div catalog_listing is never declared nor is the partial catalog_listing ever rendered.