Fancy-up the Graph widget.

![screen shot 2013-09-06 at 3 32 43 pm](https://f.cloud.github.com/assets/1771003/1099371/6ad4fe72-1735-11e3-84d6-1f781bbe667d.png)

This adds a number of features to the Graph widget.  As much as possible, I tried to keep the names of parameters the same as their Rickshaw counterparts (hence the addition of "renderer" as a parameter, in place of "graphtype").  The idea is to make this as painless as possible for people experienced with Rickshaw.

All of the below is also documented in a README.md file in the Widget directory.

Supported HTML data fields
--------------------------

* `data-title`: Title to display.
* `data-displayedValue`: If provided, then the value to display overtop of the graph.  If not
  provided, then the most recent value will be used if there is only one series.
* `data-renderer`: Any valid Rickshaw renderer, including 'area', 'line', 'bar', 'scatterplot'.
* `data-stroke`: If "true", then area graphs will be drawn with a stroke.
* `data-unstack`: If "true", then area and bar graphs will be "unstacked".
* `data-colors`: A ":" separated list of colors to use for each plot.  If there are fewer colors
  provided than there are series to graph, then pleasing colors will be automatically chosen.  (e.g.:
  `data-colors="#ccc:#ddd:#eee"`)
* `data-stroke-colors`: A ":" separated list of colors to use for strokes.
* `data-legend`: If "true", then a legend will be added to your graph.

Passing Data
------------

Data can be provided in a number of formats.  Data can be passed as a series of points:

    points = [{x:1, y: 4}, {x:2, y:27}, {x:3, y:6}]
    send_event('convergence', points: points)

Note that the `x` values are interpreted as unix timestamps.  Data can also be passed as full-on
Rickshaw-style series:

    series = [
        {
            name: "Convergence",
            data: [{x:1, y: 4}, {x:2, y:27}, {x:3, y:6}]
        },
        {
            name: "Divergence",
            data: [{x:1, y: 5}, {x:2, y:2}, {x:3, y:9}]
        }
    ]
    send_event('convergence', series: series)

You can even provide colors and strokes here, which will override the values defined in the HTML.
Or data can be passed as Graphite-style data:

    graphite = [
      {
        target: "stats_counts.http.ok",
        datapoints: [[10, 1378449600], [40, 1378452000], [53, 1378454400], [63, 1378456800], [27, 1378459200]]
      },
      {
        target: "stats_counts.http.err",
        datapoints: [[0, 1378449600], [4, 1378452000], [nil, 1378454400], [3, 1378456800], [0, 1378459200]]
      }
    ]
    send_event('http', series: graphite)

You can even send data as JSON strings, straight from Graphite:

    require "rest-client"
    SCHEDULER.every '10s', :first_in => 0 do
        target = "aliasSub(summarize(stats_counts.http.*%2C%2720min%27)%2C%27%5E.*http.(%5Cw*).*%27%2C%27%5C1%27)"
        url = "http://graphteserver.local:8000/render?format=json&target=#{target}&from=today"
        graphite_json_data = RestClient.get url
        send_event 'http_counts', { series: graphite_json_data }
    end