Fixes for dtx-bind-value, add dtx-bind-int-value, dtx-bind-float-value
In `Loop.addItem`, if an item already exists and `preventDuplicates` is true,

return the existing item.

The new functionality can now work

var item = myLoop.addItem( "jason" );
item.input; // "jason"
item.dom; // "<p>My name is json</p>"

and it works whether or not the item exists
More lenient support of expressions in dtx-on-* event bindings

Now supports multiple statements, and works with or without a trailing slash:

```
<div dtx-on-click='something(); other()'>
```
Better handling of dtx-bind-int-value and dtx-bind-float-value

If the value is null or NaN, set the textbox value to "", not "null"/"NaN"
If you use a function in interpolation, don't try bind changes to a setter
of that function.

For example:

    <h1>$name is ${age()} years old</h1>

Previously, if age is a member function on the widget, not on a property of
the widget, it would attempt to bind our changes to the set_age() expression,
which does not exist.