First working version of transaction map with simple tests

Work to get the entrySet() keySet() and values() methods to work proeprly in a transaction context. They are potentially write operations which are mainly used for reading. so allow for the reading part by wrapping them in unmodifiables. add comments to describe whats being done.

Separated out the context from the main class to clean up the main class.
add interface to express what being a transactional thing requires. This will allow implementing the same interface for sets also.