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!
Just a suggestion, even when is not required I think is good if we follow the coding standards in tests too. For example this empty line should be removed.