* fail: giving job.create(..) anything but a function arg makes no sense either
* pass: job.create(..) throws if given anything other than a function arg (including no arg at all)
* refactor: since we've made sure that .create(..) got indeed a function, we can simplify the resulting job's implementation
* refactoring: extracted check for arg being function into helper function; nicer error type and msg
+ tests for exceptions expect a specific TypeError to be thrown (using setUp method for first time)
* refactor tests: combine "no arg" and rest of "non-function arg" tests
* refactored tests re TypeError on non-function arg
* refactored tests re TypeError on non-function arg, again
* refactor tests: simplify nesting
* refactor tests: simplify naming and nesting
+ fail: the job, when given a non-function arg, should throw a TypeError
* (fail): fix one, break the other: job now requires a function arg, but it does not accept no arg (which it should)
* (fail) fix tests: we need to split up again the tests for a) no arg and b) a non-function arg
* (still fail): hehe, that would've been too easy ;)
* pass: a job will either accept no arg at all or otherwise a function arg (as first arg, the rest is ignored)
+ fail: now let's get back to the callback (h) as passed in j.then(h) - h should be called
+ pass: the most simple thing to do - although we already know that this isn't quite right. So next thing is to write the right tests...
* (fail) require job.create(f).then(h)() to call both, f and h. Note that the *test itself* is wrong, but it's just a failure, not an Error (see https://github.com/busterjs/buster/issues/333)
* (fail) fixed test: make f a spy so we can assert on whether it was called
* pass: the most simple thing... Sure we know that this can't be quite right - so let's just write the right test!