A whole whack of error-checking.

Checks 1) presence of required args, 2) appropriate types of args.

These checks may break some of Jon's tests (i.e. those that throw invalid arg types)
I am happy to go and change these `stop` checks to `warning` instead.