refactor storage to a separate class

moves storage to a separate MockStorage class that is only responsible for storage, while all the pipeline methods remain in MockPipeline

only in MockStorage class will need to be synchronized
Why do you use `final` keyword here? Check this: http://www.ibm.com/developerworks/library/j-jtp1029/index.html