Reworked the way that the executor runs

Allowed all arguments to be optional and the attemptor to be any callable.
Split up original Attemptor interface into separate interfaces.  This allowed
the ability to check which (if any) interface the attemptor is implementing.

Renamed most of the strategies for consistency.

Signed-off-by: Nate Brunette <n@tebru.net>
Removing log level and message setters

This should clear up potential issues with the ExceptionLogger being mutable.

Signed-off-by: Nate Brunette <n@tebru.net>
Added ability to pass in attemptor arguments

The execute() method now accepts an array of arguments that will get passed to
the attemptor.

Signed-off-by: Nate Brunette <n@tebru.net>
Updating README

Signed-off-by: Nate Brunette <n@tebru.net>