new protocol-based service API

This PR changes the service macro so that we can use protocols to define service contracts, rather than using the raw prismatic syntax that we were using before.