Commands for a menu are specified by providing structs that implement the Command trait.
This allows the menu to understand how to implement the command.
A struct that implements the IoDevice trait allows a menu to interact with the outside world.
This is by providing it with inputs and a way for it to deliver outputs.
You probably don’t want to implement this trait yourself! This trait is used to make
the internal structure of the Menu opaque to the user which is useful for implementing
the builder pattern in the way it has been done here.