Primarily, this rearranges how listeners are handled internally by the
various PerformanceView classes so that there's not so much redundancy.
It also fixes ReversePerformance and ProxyPerformance to not leak.
Previously, they never unhooked their listeners, so they'd leak until
the entire chain of performances was killed. Now, they unhook as soon as
they themselves have no listeners left, which is more idiomatic.