A new attempt at bugfix for session formstate handler

I tried a different approach. This one does the following:
- Fixes the previous bug where using multiple windows could cause a situation where a formstate for one window gets deleted by another window, resulting in the dreaded exception thrown. It does this by creating a unique id for each window requesting a form state so that they will not collide.
- Implements a reasonable garbage collection strategy so that the session formstate is actually a usable formstate mechanism and much less likely to get so big that it slows down the system.
- Gets rid of the exception for a lost formstate, and instead just reloads the current page, which is a much better user experience. An excpetion for a lost formstate is not correct, since a lost formstate is a rare, but expected thing to occur (user could backup past our garbage collection scheme, or the session might expire).