I tend to agree with @julienw: as setters become more complex, the outcome of declarative code like `view.visible = false;` becomes more surprising. Wiring up events to this setter means that *anything* could happen when we set the property (i.e. even viewing the source would not directly explain what was going on/going wrong). Of course, using a method to set the state doesn't change that, but I think the few extra keystrokes of `view.enter();`/`view.leave();` offers a lot in terms of readability.

I do think that two separate methods, `enter()` and `leave()` (which is what I think @julienw meant [in his comment above](https://github.com/gnarf/gaia/pull/1/files#r6146991) would be a bit overkill--especially when you consider the need to query the visibility status. Maybe just `visible([ value ])`, which returns the state when `value` is not specified.

In any case, we should wait to emit the event until *after* we update the class list.