refactor AIR container into smaller methods

What do you think about refactoring like this -- breaking `extract` down into components, and integrating the exception into the method which returns the installer executable?

Then in the test you can do the skip like this
```ruby
skip unless Cask::Container::Air.installer_exist?
```

And we can get at the installer if it is needed separately for running upgrades, which you mentioned earlier.

I was thinking of making a base class along these lines for all external executables, in part to provide a single interface for configuring them (overriding the locations).