Refactor Tasks for easier maintenance

#### Setter methods
For Task methods that simply pass through to the `params` object you can now just declare a `setters` map like

```js
setters: {
  'methodName': 'paramName'
}
```

This will generate the appropriate setter method and map it to the given param name.

For params where arrays are valid inputs you can also do...

```js
setters: {
  'methodName': 'paramName[]'
}
```

This will generate a comma separated list.

#### New `request` method

In order to support richer tasks in the future a new `request` method will automatically select `GET` or `POST` depending on the length of the body. Even though most modern browsers support very long URLs this will still allow some older browsers (IE 8) to work.