Documenting the subsystem interface.
Top level program to manage subprocesses.

Currently limited to functionality of finding the directory where the
program was invoked from and finding the "libexec" directory.

During development, this directory is different. The code checks for the
.lock-waf* file to see if we're invoking tortuga from the build directory.
Changing join to join_mutable and creating a join function.

The join function will return a new string instead of changing
the original string.
Subsystem main function. Subsystem setup takes a json object.

EventHub subsystem implemented as it's an easy forwarding for events
and incredibly easy to implement as a sample subsystem.

Don't suggest actually using the EventHub, as it potentially can be a
drain on network activity if large objects are sent.
Allocate subsystem on the free store instead of the stack.