JSession Refactor

This allows JSession to be unit testable and provides an interface similar to that in Symfony to allow injection of sessions into the CMS.

It *should* be b/c for users however so far all I've been able to do is test stuff with core extensions. If you are doing anything outside of core that uses JSession please do test it or let me know of your application!
Whipped through them quickly. Think I've covered most your points :)