Replace existential session manager with concrete data type

Using a typeclass and existential quantification for session managers isn't necessary and complicates typing.

Instead, closures can be used to pass state references (IORefs, MVars, or TVars) to a concrete session manager (as in oneSessionManager in Tests.hs).