Refactor Client and Cli to use callbacks

Success and failure callbacks are now sent by the CLI to the client.
Input validation and finding the right ELB  is done on the CLI side because it knows of every ELB available and can ask for user input, warn user or exit the program.

Also added guard as development dependency

Finally, I rewrote the specs for better clarity, especially when run with `spec --format documentation`

Example:
```
Elba::Cli
  help
    prints list of available commands
  list
    prints the list of available ELB
    --instances
      prints instances attached to each load balancer
```