Enhance Form.serialize to be able to handle deeply nested parameters.

Turns out that assertHashEqual method used in the existing tests isn't
too smart. Wasn't picking up that hashes weren't equal after all.

Added better tests, then ensured that Form.serialize works as expected,
turning deeply nested params into proper objects.

Also modified toQueryPair to ensure that transforming those back to a
querystring to submit to server works as expected.