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
Merge pull request #26 from neg/harness3

Harness3