Not calling task when args are missing

Not sure if this is something useful to others. I don't like the rather unfriendly traceback and `TypeError: foo() takes exactly 2 arguments (7 given)` message - this provides something different.

I don't like the use of NotImplemented as a sentinel value, but I'm not sure what else would make sense. I could do something awful, like `object()`, but the intent is no where near as clear.