More systematic approach to tool validation

This employs similar technique to what HasProps.__setattr__() uses.
Merge remote-tracking branch 'origin/master' into mattpap/tools_help

Conflicts:
	bokeh/plotting_helpers.py
Simplify _plot_from_string() by setting 'plot' afterwards
Sort tools and attributes to get consistent help results
Fix computation of repeated tools and do it only once
Rename p to plot in _new_xy_plot()
Merge pull request #1372 from bokeh/mattpap/tools_help

More systematic approach to tool validation