Use single name resolver for nested functions
This is a prerequisite to inlining `useMemo()` lambdas so that we can better optimize them. Nested functions are evaluated with a fresh HIRBuilder, which means that they currently have their own `bindings` object for mapping identifier instances to IdentifierIds. This means that identifier ids in a closure are _always_ different that those outside the closure, even when they refer to the same identifier: ``` function Component(props) { props; // becomes e.g. props$1 const onClick = () => { props // becomes e.g. props$2 }; } ``` For useMemo inlining this is problematic because we've lost the association that these identifiers actually refer to the same thing. This PR changes that, sharing the name resolution data structure between the top-level function and any nested function expressions.