Move message creation to MesssageSend

This removes duplicate loading through caching and allows Statistics to
operate on the MessageSend instead of passing many arguments around.