protocols are types too
add number hints
handle type unions created by if as sets. add some more type hints
around JS primitives like object and array.