WebFrontend: Allow certain pages to be bookmarked by the user.

This allows the main pages of each section to be bookmarked by the user.  this is a custom implementation, not using any API.  The reason for not using History.js is that we're only supporting the latest generation, so there is no need to allow hash based fallbacks.

The reason I've used QueryString is just to a lot of the existing code using hash based click events, therefore clearing the hash that is set.

Also includes some unrelated updates to the service API.