Shell: split into dispatcher and worker thread
Split the shell logic into two threads: While very most of the current logic would be done by the dispatcher thread, commands shall be executed in a separate worker thread (child thread of the dispatcher).
This approach would allow the worker to easily listen to individual events such as user input (which is not possible right now). On the other hand, system stalling due to bad command implementations (i.e. waiting for an event but not taking system core events into account) can be prevented by the dispatch thread killing the worker thread by force on shutdown.
Stacks should be configured as small as possible for the dispatcher thread and configurable (via the AMIROOS_CFG_SHELL_STACKSIZE
macro) for the worker thread.