nice, i'm super down with this. only change is can you update the docblock and then we can make the argument swapping a single line, so it would become:

```js
/**
 * Download GitHub `repo` to `dest`, with optional `branch` that defaults to master.
 *
 * @param {String} repo
 * @param {String} branch (optional)
 * @param {String} dest
 * @param {Function} fn
 */

function download(repo, branch, dest, fn){
  if (3 == arguments.length) fn = dest, dest = branch, branch = 'master';
  ...
```