Improve `Task#retry` by supporting `opts`

The following looks really ambiguous to me. One can easily by mistaken by what 1 is and what 2 is

```js
task.retry(1, 2);
```

This pull request introduces the ability to supply `opts` WITHOUT introducing API breaking change:

```js
task.retry({ maxRetry: 3, retryDelay: 4 });
```