isFunction, begone! #485

@garyb Mind having a look?

The change adds a new data type `NameVisibility` which tracks two types of visibility:

- Normal visibility
- Visible to the current binding group only after a function binder can ensure this name is defined.

When we hit a function binder, we move everything from the second state to the first.