Select node hooks

Add optional on-select-node callback argument to treeview.  Selecting a node will cause this function to be called (if supplied), and then the node.state will be changed.  If the on-select-node function returns a promise, node.state will not be changed until the promise resolves successfully.  If the promise errors out the node state will not be changed.  

See treeview.js selectNode for details.

Also, renamed demo demo folder to demos, and moved existing demo to demos/basic, and added demos/on-select-node.  I wanted to keep the on-select-node stuff out of the basic demo because I thought it would confuse people.