Use vs query string rather than vsid, if provided [RD-16]

The code I had was mostly good, it just required some rearranging.

We were waiting until the provided view source was fully processed before checking if there was a vs query string. That is now the first thing checked. If it exists, it is used in place of the vsid parameter.

Also adds a test for invalid vs query strings.

All tests pass, as do all of the guid + view source combos in the ticket.