Function markup

This PR has fixes for #171, #172, #76, and #204, all related to specifying functions in markup.  In summary that means:

1. use `on-selection-change=...` in markup rather than `onselection-change=...`, both in templates and in index.html
2. don't declare callback functions (like `onselection-change()`) in widget prototype
3. desupport syntax like `myWidget.onclick = ...`; only support adding event handlers via markup (item 1) or programmatically via function call (`.on()`, etc.)
4. Function attributes in index.html (i.e. outside of templates) can take parameter names, ex: `on-selection-change="console.log(event);"` or `on-func="console.log(param1, param2);"`, where `param1` and `param2` are defined in the JS file.
5.  Inside templates, it includes support for the syntax `on-event-name={{eventHandler}}`, ex: `on-click={{myClickMethod}}`

Issues:

(A) The latter part of (4) assumes that the parameter names  to widget methods haven't been mangled by uglify.

(B) The disparity between the syntax for attach events and attach points bothers me:

* `on-event-name={{eventHandler}}`
* `data-attach-point=name`

Both because of the `data-` (only for attach points)  and the `{{`/`}}` (only for attaching events).

As a side note, a few years ago people would have harshly criticized us for violating the HTML spec by making up non-standard attribute names that don't start with `data-`.  Apparently nowadays though it's in fashion.