only use numeric type hints where we actually need them.

Changed infer-tag :if to check if we have a truthy test and ignore the
else-tag in that case, addresses cond always returning a type union with
nil.

Type hint nil as 'clj-nil, this is because we want to return nil if we
could not infer a tag.

Relax arithmetic type checking to accept type unions with 'clj-nil, this
is because type inference isn't strong enough to know whether first will
return nil or not. Handling this would require knowing that the variadic
arg is non-empty because a smaller arity exists and we would need to be
able that a non-empty argument to first will never return nil.

Don't add unnecessary ^number type hints to core.cljs.

Add tests for the above cases.