Batch 1966: Use abstract classes to inherit behavious

This series of commits does a few things:
* A private variable was added to the ItemStreamSupport 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 child classes that used similar functionality.
* The classes that extended ExecutionContextUserSupport were changed to extend ItemStreamSupport (or the abstract readers/writers), 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.
This pull request was originally submitted as part of a larger pull request number 122. Based on the comments by Michael Minella, the changes were reduced to fit in with contributor guidlines