Componentize Storage Subsystems

Business logic and encoding/decoding tasks should be separated.  These commits provide the foundation for many needed cleanups.