Updated `module/dns': updated `:dns:fqdn()'

This function now tries to determine if the hint supplied is already
a fqdn (by means of known fqdns and `:dns:qialified()'), and if not,
then do it will fall back to the existing logic/code.

This should simplify things for most callers that had to do this work
themselves, and speed things up in the case that the hint supplied was
already an fqdn.
Updated `module/net': new, fix

New:

    `:net:portpersist' - keep trying for an open port using socat, and
    do so `${attempts}' times.

Fix:

    The internal and private functions should not have variable
    arguments, this is the work of the public function; fixed
    `:net:portping()'.

    Fixed small bug with `:net:portping()' where tldid was not set in
    the case where the fqdn was external.
Added `module/net' unit tests: closes nima/site#7
New `module/softlayer'

New site module that interfaces with `extern/softlayer'.
Updated `libexec/softlayer': flag for cache added

Added a programatic flag (variable) to enable/disable caching, and
set that to false as softlayer API calls are not too costly.
New `module/mongo': mongodb site module
Amended `bin/ssh': persist on down hosts

If a host is not responding on port 22, then keep trying it until it
does - and only then make an ssh connection attempt.

This is now used in `::remote:tmux()' instead of the ssh binary
itself.
Updated `module/gpg': minor update
Updated `module/util': doc, update

Doc:

    Fixed the usage docstring for `util:secret()'

Update:

    `g_GPG_KEY_PATH' is no more, and site will look for a GPG key
    based on the active profile instead.  No more guess work.
Added `module/util' unit tests: for nima/site#4