Events for interactive tutorial

Closes #140 
Closes #228 

Also a client side solution that resolves #175. See demo.
[edit or reopen if server-side support is required -- note that we already have server side data validation]