Add an OpenTSDB datasource.

This adds support for querying OpenTSDB for metric data.
began work on unsaved changes warning when changing dashboard, Issue #324
New config setting for graphite datasource to control if json render request is POST or GET (Closes #345)
working on unsaved changes warning
Fixed an exception when adding a graphite function.

The error was that funcDef is just a string parsed from an event
like onMouseDown or something like that. This event is turned
into a function instance, and the function instance has
expected parameters and so forth. However, the number of
parameters was actually checked on the funcDef.
small progress on unsaved changes warning
More work on unsaved changes warning (Issue #324)
Added onbeforeunload check to unsaved changes warning feature
Merge branch 'unsaved_changes_warning' (Closes #324)
Merge pull request #356 from Tetha/master

Fixed an exception when adding a graphite function.
Fixes to filters and the 'All' option. It now never uses '*' as value, but all options in a {node1, node2, node3} expression (Closes #228, Closes #359)
removed unused function 'endsWithWildcard', fixes jshint error
Modified metricKeys to handle multiple graphite sources.

This wasn't all too hard to change, I mostly changed the
single http get to multiple http gets, one for each data
source of type graphite.

It's still not a good idea to call this on the web
frontend, since the whole thing was working for about
20 - 30 minutes when I clicked it, so I'm not
committing my changes to settings.js or the view itself.
Change InfluxDB SQL generation template to wrap column names in quoutes

Since column names can contain dots or dashes, which will give syntax errors from InfluxDB API, unless wrapped in quoutes
Merge pull request #369 from jbripley/influxdb-columnname-escape

Change InfluxDB SQL generation template to wrap column names in quoutes
updated changelog with PR #369
Extracted multi-graphite query function, fixed loadRecursive

The new function in metricKeys generalizes what my loadAll
from the previous commit did, it takes a request and a
callback. The request is executed on each graphite installation
and the callback is executed for each result. This makes
implementing loadAll and loadRecursive almost as simple as
it was.
InfluxDB Filters: added function to generate filter list.
InfluxDB Filters: added filter to queries.
Improvement to series toggling, CTRL+MouseClick on series name will now hide all others (Closes #350)