Use abstract classes to inherit behavious

This series of commits does a few things:
* ItemStreamSupport was renamed AbstractItemStream to make the name more meaningful and to make it match the Interface name
* AbstractItemStreamItemReader was renamed to AbstractItemStreamReader to more closely match the Interface name
* AbstractItemStreamItemWriter was renamed to AbstractItemStreamWriter to more closely match the interface name
* A private variable was added to the AbstractItemStream to hold a ExecutionContextUserSupport. This is used (via some new methods) to find the names of the keys to be used in the execution context. This was changed in a few places.
* The classes that extended ExecutionContextUserSupport were changed to extend AbstractItemStream, and the key logic was changed to use the new methods above. The reasoning behind this is that it makes more sense for the classes to extend the Reader/Writer type classes than a utility class for key name building.