`Todo.from_rich_message` was partially tested from the MessageGateway, but it is mostly untested and does not belong in Todo due to it's unique nature. Extract it entirely from `Todo` into it's own dedicated object for unit testing.