Switched to using unique_ptr for messages.

Previously message types were intrusively reference-counted; that is,
pointers to message types were held by intrusive_ptr. This was
problematic not for performance reasons (the performance impact of
reference counting was negligible) but for code quality reasons; in
particular, there are many reasons why messages should be mutable (the
most important of which is the difficulty of transferring attributes to
different messages), but mutability combined with unclear ownership
semantics seemed like a disaster waiting to happen. This change resolves
the issue by making messages owned exclusively by one thing at a
time (be it a component, message, or whatever) and requiring that only a
message's owner can mutate it.

Note that just about everything in the DRAM subsystem is broken at this
time as a result of this change, and will be fixed shortly.