Refactor request handling for XHR, JSONP and image beacons

* XHR now attempts to use `MSXML2.XMLHTTP.3.0`, `MSXML2.XMLHTTP`, or `Microsoft.XMLHTTP` objects if `XMLHttpRequest` is not supported
* XHR, JSONP and image beacons are all now generally reusable, and may be exposed under utils in a later release, pending some signature (in)decisions for JSONP and beacons
* `uploadEvent` and `sendQuery` functions revert to XHR when URL exceeds `Keen.urlMaxLength`
That's actually an indentation blip..  `handleFailure` is just this:

```
var handleFailure = function(res, req){
  var response = JSON.parse(res.responseText);
  self.trigger('error', response);
  if (self.error) {
    self.error(res, req);
  }
  Keen.log(res.statusText + ' (' + response.error_code + '): ' + response.message);
};
```