Rewrote most of Message API to be easier to understand and use.