Move message result creation to MessageResult

This follows @3099d2c and cleans up the spread out protocol handling.
Move common Message* methods to Message superclass