use inspect to get args from eval (if present)

There is never a need to specify nargs in a function class unless
it is too confusing to handle multiple args with a few variables,
some having default values (which is the way the builtin range function
works, for example).