Pervasive simple type inference

Move infer-tag into analyzer. Add loop, method, def, invoke, recur and
enhance if. All constants now are tagged. If we know we have only clj
types we return clj as the tag. If we might have JS types we return
any. If we can't determine the type we return nil.

Add *passes* to analyzer. By default only contains the inference pass.

Make necessary tweaks so that fn invocation can be properly
inferred. Put the analyzed method into :namespaces, we may want to tweak
this in the future to only put :max-fixed-arity, :variadic and the tag
to save memory, will need feedback.

Validate primitive arithmetic operations. All inlining arithmetic macros
are now hinted so that we can check them in parse js*. If we can
determine that some type is not numeric emit an informative warning.

Type-hint core protocols. Inference is good enough for this to propagate
so we don't need to type hint protocol backed fns.