Update default options handling to be consistent, easier to read.

Before, there were three ways that default options were being set:

    opts.phantomFlags = opts.phantomFlags || [];
    opts.maxErrors = typeof opts.maxErrors === 'number' ? opts.maxErrors : 3;
    opts.timeout = opts.timeout !== false ? opts.timeout || 30000 : 0;

After the change, all options are set in a consistent way using the first style.

The second style of checking that the input is a number is potentially
problematic, because a default is silently used if it is not. If
'maxErrors' should never be a number and it's important to check this,
then the best behavior would be to throw an exception so the developer
finds out right away that there's a problem, rather than being surprised
or confused later about the silent substition of a default value.

For now, we just pass through a value of the wrong type as we do with
all the options. This is more likely to lead to a useful diagnostic for
the developer than the silent substition of the default value, which
would unexpectedly work with a different value.

Regarding the handling of the "timeout" value, it appears to be
complicated way to express "opts.timeout || 30000". I tested the result
of several value including 'undefined', 'null, '0' and '1' got the same
result with the simple logic vs the complex logic in all cases.

Another inconsistency was that some defaults were set on "opts" while
other defaults were set only on "vars" that follows. Now all defaults
are set directly on 'opts' for consistency.

Finally, the defaultOpts are moved to their own object, where it's easy
to review them all in one place.
Merge pull request #45 from markstos/consistent-option-handling

Update default options handling to be consistent, easier to read.