'Takes a callable and returns a tuple with the list of Argument objects,
the name of *args, and the name of **kwargs.
If *args or **kwargs is not present, it will be None.
This returns a namedtuple called Argspec that has three fields named:
args, starargs, and kwargs.'

@staticmethod
def parse_argspec(callable_):

    (args, varargs, keywords, defaults) = inspect.getargspec(callable_)
    defaults = list((defaults or []))
    if (getattr(callable_, '__self__', None) is not None):
        args = args[1:]
    first_default = (len(args) - len(defaults))
    return Argspec([Argument(arg, (Argument.no_default if (n < first_default) else defaults[(n - first_default)])) for (n, arg) in enumerate(args)], varargs, keywords)
