Misc range selector cleanup.
Add highlighted weekends example to gallery
Add sanity test ensuring that creating annotations in a drawCallback
results in a secondary draw, but initial parameter set to false.

Also minor formatting corrections.
fix broken test case
Add "test" script, which uses phantomjs for a pure command-line test.
Merge branch 'master' of github.com:danvk/dygraphs
more docs in phantom-driver.js; log speed
Edit in jsFiddle
Introduce a plugin system and move the legend to it.

This is still pretty rudimentary, but I wanted to get something into the
mainline to start getting some real experience with it.

This does a few things:
1. Introduces a way to register plugins.
2. Adds some standard methods (e.g. "activate", "destroy").
3. Allows plugins to register "event listeners" and adds a few hooks.
4. Adds a few new public APIs that were valuable.

This is still a work in progress -- plugins/legend.js still uses two private
APIs -- but I'm generally really upbeat about this refactor. It was great to
see how much even this simple exercise forced the legend code to get simpler
and use public APIs.

Squashed commit of the following:

commit bb250bdb928076c763b83d7ad5a60d15b9187510
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 17:50:28 2012 -0400

    clean a few things up, add plugins/README

commit 54328995c79a0091e56d4eda655edbd40e3379e6
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 17:22:03 2012 -0400

    self code review

commit d49379470fbe26388bdf46d45aeb5e5cdbc4004d
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 17:01:46 2012 -0400

    clean up comments

commit 50b731d0559c490771112afc2f0c6c5b50bbeb26
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 16:52:10 2012 -0400

    use public API for highlightSet_

commit 848c0ca24f2302db206e6cf8d2f512432c251813
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 16:44:54 2012 -0400

    factor out generateLegendDashHTML, too

commit 4f54b5061cea5845d7d2ca38f09ec1bb3578015b
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 16:37:13 2012 -0400

    migrate generateLegendHTML out of dygraph.js; only using one private API

commit 060650eeb7007cc32906f1edc62ccfc1ef5b1b54
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 15:52:24 2012 -0400

    misc cleanup

commit ce592df0224fe9953848a074582093a113358c9f
Merge: f05983c 29cb484
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Apr 6 15:35:58 2012 -0400

    Merge branch 'master' into plugin-legend

commit f05983cdf6f0f2ae4dae4753ad9df53ef89addf2
Merge: 19146fb d254d25
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Fri Mar 30 17:58:48 2012 -0400

    merge upstream changes

commit 19146fb11c9eb7cccc1d971dad67b8175570a3e6
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Tue Mar 27 00:34:45 2012 -0400

    cleanup

commit 72e8cbcc829eca1054d7318cc6b5316cb5061a09
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Sun Mar 25 18:34:17 2012 -0400

    remove setLegendHTML

commit f949d4cedfc3107aa4269d496e0c8106ba86a209
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Sun Mar 25 17:23:26 2012 -0400

    support labelsDiv; move more logic into legend.js

commit 3119af67d70891968982fc2dcc042c3f466ed99e
Author: Dan Vanderkam <dan@dygraphs.com>
Date:   Sun Mar 4 13:18:39 2012 -0500

    legend plugin that works!
Copy new plugins dir to dygraphs.com
Fix most warnings in tests; add support for loading (non-auto) tests to phantom-driver.js, but do not enable.
klaus comments on plugins
fix regression on issue 152
Avoid calling length on undefined if no event handlers are registered.
Fix small regression in behavior on plugin CSS (issue 315)
Update plugin registry

- use legend.prototype consistently for method calls, remove .call() hack

- replace the registerer with returning an event map object
re-add 'validate eventName' TODO.
Filter out the query directory from docs. Fixes http://code.google.com/p/dygraphs/issues/detail?id=312
More fixes for http://code.google.com/p/dygraphs/issues/detail?id=312
Tracking all event registrations, and deallocating them en masse makes
destroy() retain much less memory. e.g. in a simple case creating and
destoying the canonical demo, retains 10K less data upon destroy.