Allow GenericMessage subclasses to provide headers

A GenericMessage subclass may want to use a MessageHeaders subclass
to store its headers. To enable this, add a constructor to
GenericMessage that takes a MessageHeaders instance and uses the
headers as-is.