Add service layer model types

These new types describe a service layer interaction, as well as providing a
container for a 'common' model component.  They may be used to reduce the
boilerplate that needs to be written for (for example) view model types that
represent service layer interactions.