Add output level "DEBUG2" for internal debug

Intended for framework / in-depth debug.
Split execute code

Split execution code into "start", "capture" and "finish". Execute works
the same but the underlying functionalities of execute can now be used
separately.

The most likely usecase for this is when the user wants to manually
interact with the command running.

For example:

start "scp foo machine:"
expect {
	"password" { send ... }
}
set return [finish]

or even

start "scp foo machine:"
expect {
	"password" { send ... }
}
set output [capture]
set return [finish]

The checksum stored in the int::shell data structure can be utilized
with -notransfer in order to get out of a custom expect loop.

set checksum [dict get $int::shell($int::active_shell) "checksum"]
expect {
	foo { }
	-notransfer -re "$checksum (\[0-9]+)\r\n" {
		# We are done
	}
	default { fail... }
}
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!