The checking logic and error messages were partially duplicated in the
various methods. Clean this mess up because that's just bad form (and
because it's about to change).
This also clears up a minor bug in the method on `aggregating-message',
which used to report a confusing error message if the method return type
wasn't what it was expecting.