Support passing `argumentCount` denodeify

This lets you run code like:

```javascript
var stat = Promise.denodeify(fs.stat, 1);

var stats = Promise.all(['file1.txt', 'file2.txt',
'directory'].map(stat));
```

which would currently fail as the `callback` gets passed as the wrong
argument.
fixes #23 by adding resolve, reject, cast, race, and prototype.catch
use from for cast
tests
update copyright year
Merge pull request #26 from gdi2290/patch-1

update copyright year
Merge pull request #24 from then/argument-count

Support passing `argumentCount` denodeify
Merge pull request #25 from calvinmetcalf/add-es6

fixes #23 by adding resolve, reject, cast, race, and prototype.catch
Release 4.0.0
Automatically rewritten for npm.