The MuleSession has all the logic of sending and receiving events internally as well as managing the pooling and queuing of events for the underlying object.
To clarify roles of the core classes the MuleSession should be split into Session Component.
Component - manages event queuing and pooling of the components. Similar to a 'stage' in SEDA terms.
Session - Sending and receiving events.
This has been completed in the latest CVS and will be released in the next version.