Define a subcommand for the psychic_disco function
    Expects functions to supply a list of their arguments
    Converts these to arg_parse arguments, and transforms
    the argparse Namespace object so that commands can be
    invoked as though they are normal functions (which they are)

def subcommand(f):
    """ Define a subcommand for the psychic_disco function
    Expects functions to supply a list of their arguments
    Converts these to arg_parse arguments, and transforms
    the argparse Namespace object so that commands can be
    invoked as though they are normal functions (which they are)"""
    sp = subparsers.add_parser(f.__name__, help=f.__doc__)
    for argument in inspect.getargspec(f).args:
        sp.add_argument(argument)
    sp.set_defaults(func=lambda args: _apply_args_to_func(args, f))
    return f