Fix signature help crash when requested outside argument list

This change makes signature help more resilient.

When attempting to give signature help, we start at a token and walk up the tree. Any call expression or new expression along the way is considered. In a call or new expression, a `<` or `(` token signals the start of a list, while any node inside a list triggers signature help as well. Any other part of the call/new expression defers signature help upward in the tree. We used to list these miscellaneous cases explicitly, and we forgot to list the `new` keyword. Instead, this change looks for the containing list, and if it is undefined, we just continue up the tree.
Just curious, who listening to this assert? and If we only use them in debug, should we remove them?