Refactor into multi task

Moved most of the logic in the `registerTask` to a new `S3Task` class in lib and converted to `registerMultiTask`.   The new class is mostly just a copy and paste of the original code, just a couple things moved into their own functions to make them testable.

Added some unit tests for the major functionality and made sure everything linted properly.  I do apologize for the 4 space tabs, I didn't catch the difference until just now and thinking about fixing it is making my eyeball twitch.  I also apologize if you like everything in one commit, but I think it's not too bad.

I guess the most controversial thing would be the removal of the `getConfig` calls in lieue of being more explicit with the options you pass in.  Also, grunt 4 should automatically expand template values if you put them in for keys, secret or bucket; see https://github.com/gruntjs/grunt/wiki/grunt.config for more info (it's completely possible that I'm mistaken).