Making it so that all config can be provided via task config

This pattern is generally better than using `grunt.option` as it allows you to specify the options in the task configuration. In the task configuration yourself, if it tickles your fancy, you can use grunt.option to set values in the config, thus making command line parameters accessible via `this.options()`. This means that you don't have to provide all of the parameters via command line arguments (i.e. non-sensitive data), and can just pass through, for example, the user credentials (so that one does not have to commit user credentials to a possibly public git repo).

It's okay if it's empty. Where the value is actually used, it's as part of an extension. Presumably, if it's ever empty, your intention is not to use options to define configuration, but instead to use the mechanism that you already had setup.

Here's an excerpt on how we're using my fork in our codebase at Atlassian:

    module.exports = function (grunt) {
        options: {
            transifex: {
                api: "https://www.transifex.com/api/2",
                auth: {
                    user: grunt.option('auth.user'),
                    pass: grunt.option('auth.pass')
                },
                projectSlug: "global-admin-billing",
                langCoordinators: [],
                sourceLanguage: "en",
                translationMode: "default"
            },

            localProject: {
                sourceLangStringsPath: "i18n/en",
                stringsPath: "temp/retrieved/i18n",
                ignoredResources: []
            }
        }
    }

(We actually have the value of options pulled out to a separate variable so it's shared across all your tasks, but you get the picture).

If you have any more problems let me know. Thanks a lot for writing this tool, it has been really useful in our builds for publishing translation data!