Abstract out key-value store from Session engine

Currently the Session singleton interface assumes that the key value pairs of the session object are stored as hash attributes in the session object. However, a specific session engine implementation may want to store these in another way. This patch abstracts the access of the key value pairs out of the Session singleton into the engine base class (Session/Abstract.pm) so that how the keys are stored can be handled differently each engine implementation.