shell: add unittests for shell_{push,pop}

Very basic tests to verify expected behavior.
shell: add unittests to test int::active_shell

Check that the internal variable int::active_shell is updated correctly
when spawing, switching and closing shells.
Introduce namespaces (breaking API)

This is a major refactoring. Expect breakage.

The existing setup, where 9pm resided in the global scope (and ::int::)
didn't scale and was extremely fragile.

Reasons for this patch
----------------------
Naming collision
If a user named his function get_time and returned a unix timestamp it would
override the get_time function used by 9pm to add timestamps, resulting in
logs switching to unix timestamps half way through the execution. There where
_many_ more commonly named variables and procedures in the global scope,
creating a minefield for users.

Scalability
As the ::int namespace was the only safe-haven for arbitrary naming of internal
variables and procedures it rapidly filled with things related to all parts of
the framework. This obviously didn't scale very well.

Whats new
---------
The new top level namespace is 9pm. Under 9pm resides various sub-namespaces
that divides the code into logical parts, like "output", "cmd", "shell" and
"ssh" to name a few.

All these sub-namespaces are unique to tcl/expect/tcllib. Meaning that the user
could neglect the 9pm by recursively importing using "namespace path ::9pm".

API changes (neglecting ::9pm)
------------------------------
shell               -> shell::open
close_shell         -> shell::close

ssh                 -> ssh::con

execute             -> cmd::execute
start               -> cmd::start
capture             -> cmd::capture
finish              -> cmd::finish

scp                 -> scp::transfer, scp::put, scp::get

output              -> output::warning, output::debug, output::debug2,
                       output::info, output::note
result              -> output::plan, output::ok, output::fail, output::skip

get_node_info       -> conf::get
get_req_node_info   -> conf::get_req

get_time                    -> misc::get::time
get_unix_time               -> misc::get::unix_time
get_rand_int                -> misc::get::rand_int
get_rand_str                -> misc::get::rand_str
get_script_path             -> misc::get::script_path
get_script_name             -> misc::get::script_name
get_running_script_path     -> misc::get::running_script_path
get_running_script_name     -> misc::get::running_script_name
prepend_path                -> misc::prepend_path

Under the hood
--------------
Using namespaces to limit scopes means that shell data can be stored in
9pm::shell::data while config data can be stored in 9pm::conf::data. These
are then accessed by procedures within the same scope using simply $data.
This is a huge advantage to the old code where all different things where
stored in the same place (the ::int namepsace), like int::shell_data and
int::config.
ssh: change con to connect for naming convention

Change to the same naming convention as the other commands
shell: spawn shells without history

We do not wish for 9pm execute commands to be stored in our shell
history files. Simply set the environment variable HISTFILE to /dev/null
before we spawn a shell.
shell: allow user to specify which shell to spawn

Add the ability to spawn a custom shell using
9pm::shell::open but with the default set to /bin/bash.
shell: fix 'alloc: invalid block' in shell_stack.tcl

This is not a full root cause analyses of the problem, but it appears
after the testcase in full is run and tcl cleans up left over open file
descriptors. If we in our test case close our file descriptors the problem
goes away.
harness: add basic test harness

A small simple test execution harness that support simple suite files.
Very useful when more then one test case should be executed in sequence.
harness: add suite option translations

It is sometimes useful to be able to inject a small set of keywords in
the suite options parameters and have them translated to something
meaningful.

One such option is the directory path of the script the suite is
pointing out. Think a testcase that takes one or more file paths to
files containing test data. Such test would either need to have static
paths in the script or be unable to exist in a suite. This patch adds a
<base> keyword that can be used in the suite opts portion and will be
substituted with the path to the script the opts belong to before it is
passed to the test itself.
test: run unit test using suites

* Add tap plan to all unit tests
* Add a nested suite hierarchy for all unit tests using suites
* Update unit_test/run.sh to run using the suites
harness: add JUnit output based on TAP::Harness:JUnit
harness: convert to using long options

Switch from Getopt::Std to Getopt::Long as the latter is more
flexible and more important, allow multiple value per option.
harness: add option argument to pass options to suites/tests

Options can be passed to test suites and/or cases with
the --option command line parameter.  The option parameter can
be repeated any number of times to pass down multiple values.