shell: add shell stack capability

Sometimes it is useful to temporarily push the active shell to the
background and preform a small task in another shell. It is especially
useful for small utility functions.

Unfortunately such helper functions if they wish to be reusable between
testcases needs to be agnostic about the name of the active shell when
it is called. The ability to push and pop shells solves this problem!