support for custom formatters in chart object

With this change you can add field `customFormatters` to the chart object. 
It's a map from formatter name to its class.

Such formatters still need their options to be set in `formatters` section(under corresponding name).

Example configuration(coffeescript) 

    $scope.chartSpace =
      type: "PieChart"
      options:
        title: gettext "Space distribution"
        legend: "none"
        pieSliceText: 'value'
      customFormatters:
        size: SizeFormatter
      formatters:
        size: [
          columnNum: 1
        ]
      ...
      
where `SizeFormatter` is a formatter class as per Google Charts' api.
Merge pull request #49 from edofic/patch-1

support for custom formatters in chart object
Improve IE compatibility for api load callback

Use addEventListener as the standards-compliant method, which is available in IE9+. See: http://msdn.microsoft.com/en-us/library/ie/ff975245(v=vs.85).aspx

Since IE9 introduced support for the 'load' event, there was a possibility in the old code that both 'onreadystatechange' and 'onload' event handlers would fire, so we test whether addEventListener is available and only use one or the other. See: http://msdn.microsoft.com/en-us/library/ie/hh180173(v=vs.85).aspx

If we are using 'onreadystatechange', we also need to check for the 'loaded' status. The 'loaded' status sometimes fires instead of the 'complete' status. (I noticed IE8 would give the 'loaded' status if the script was not being loaded from the cache). See: http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/

IE11 removes support for onreadystatechange. See: http://msdn.microsoft.com/en-us/library/ie/bg182625(v=vs.85).aspx
Merge pull request #51 from jasonruz/new-load-event

Improve IE compatibility for api load callback