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`
One of my favorite features of nice jsonp implementations is the ability to pass in an optional callbackName parameter and use that.

Seems easy to add this feature, not sure if this warrants a change in this PR. If you do that, then make sure to use `encodeURIComponent` below.