Support nodejs, requirejs, jQuery/CommonJS Promises, and native Base64 encoding

This fork adds support for:

* nodejs using `najax`
* returning deferred objects using `jQuery.Deferred()` in the browser and `jquery-deferred` for nodejs (deferred objects provide partial progress notification and better errors)
* requirejs by calling `define` if it exists
* native Base64 encoding on browsers/nodejs that support the `btoa` function
* notification of rate limit updates by parsing the `X-RateLimit-Remaining` headers

and is rewritten in Coffeescript.

It is being used in a javascript EPUB3 editor for github at https://github.com/philschatz/github-book.

I also have a branch that does both:

* accept a `(err, value)` style callback as the last argument and
* return a jQuery Promise

so either style may be used if that would be preferable for the pull request.