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.