Convert `MessageRouter` to an interface

Convert `MessageRouter` to an interface so we have parity w/ the other APIs and so we're not so tied to the implementation.