Add onChange function for handling events

This is an alternate implementation of #180. Here are some notable differences:

* The function is called `onChange` instead of `eventFilter`.
* `onChange` can be used within `reactive()`, `observe()`, and the `renderXx()` functions.
* The approach in #180 actually checks for the first change by using a state variable, whereas this only checks for a particular value that indicates an input is uninitialized. If we're using it only for actionButtons, that's not a big deal, but if it's important to generalize over other inputs whose starting value is unpredictable, that would be a limitation.
* This uses the new input classes that we recently introduced.

@jcheng5 what do you think of the names, and the approach in general?

If you have any suggestions for the docs, let me know.