Refactored interceptor to conform to SRP

Introduced abstractions to hide away object creation in order to:
1. Remove dependency on NBuilder (via adapter)
2. Implement SRP as the interceptor has one responsibility and that is
populating the return type if there are no setups and null is returned.
Everything else must be delegated.