Moved the last collection etags stuff out into a class so I can test it and demonstrate it actually works
Made the collection etags a bit more bulletproof, just in case we end up with an ininite loop for some unknown reason
Fixed a regression added in commit #16a6612d