Separated out Mock Creation and cached mocks

Introduced an interface to create mock. This way it can be extended to
use frameworks other than the default MOQ.
Added a caching decorator to the mock creation to ensure the same mock
is returned every time.