MessageView gets interface_name separately instead of from the message
FulfillmentView iterates each interface instead of all messages at once
Remove interface_name from Message
Construct new Messages before assigning them to an Interface
Pull out interface collection handling into InterfaceGroup
Add Implementor and use it to store implementation messages
Use Implementors in Fulfillment and require all to implement each method
Rename Interface#requirement to #message
Remove unused Implementor#subject and clean up requires