Cleaning up substep announcements
Parallelizing provider load calls
Version bump to 4.2.0
Regenerate gemspec for version 4.2.0
Merge branch 'master' of github.com:infochimps-labs/ironfan
Updated changelog (after the release - d'oh)
More correct merging of cluster and facet objects, with specs (fixes #158)
Rescue on duplicate security groups; don't die logging on full 'load!'
* launching multiple machines with a common security group would cause all but one to lose the race; this is especially exciting if they manage to tangle up the reload.
  Am now rescuing the error, and inserting a short sleep() to get some extra splay into the works.
* Dialed up the default splay in Ironfan.parallel to 0.25
* was not checking whether the cluster was nil in 'load!', causing it to die logging. Fixed my error.
Terminated machines are not bogus
The dead are not bogus (Bill & Ted I), they're ghosts (Bill & Ted II)

* terminated machines are skipped, as they were in old ironfan.
* ...except in the case of knife cluster show, which accepts them as there-but-bogus if verbosity > 1.
Terminated machines are not bogus
The dead are not bogus (Bill & Ted I), they're ghosts (Bill & Ted II)

* terminated machines are skipped, as they were in old ironfan.
* ...except in the case of knife cluster show, which accepts them as there-but-bogus if verbosity > 1.
Changed key_pair to keypair, as per the DSL
The DSL has always used 'keypair' not 'key_pair'. The only touchpoints to key_pair were internal.

With a facade in place, there's no reason to go with Fog's opinion over our own DSL's. This patch makes ironfan use 'keypair' uniformly.
Deep merge code from @nickmarden -- curing conflicts with my recent changes
Specs for scripts (but not really)
Tried to see if I could do specs for scripts without a mock mode for chef. It works but I'd like to see if this is really the right approach.

* ironfan_go! spec helper loads the basic chef environment. Chef will as usual look for a .chef directory holding a knife.rb, etc -- if there's one in the repo root, it will be used.
* added a demo cluster, and a serialized version of its computers
* Fixed an error in Ironfan.load_cluster when using a string vs. a symbol to load
Model cleanup -- now mostly round-trip to JSON
Made it so that models will accept the serialized versions of themselves. This involved overriding a couple receive_foo methods, fixing some types (eg provider takes a Class, not an Ironfan::Provider), and making sure that hash keys are symbolized.
knife cluster bootstrap sets Chef::Config[:environment] (fixes #148)
I did a little dip into the bootstrap code; in order to make bootstrap work if there are multiple environments in the slice, you'll have to identify the subgroups with each environment and coordinate launching an ssh session on each.
knife bootstrap prepares a single template file that draws on the Chef::Config[:environment] setting, and uses that as the command to a knife::Ssh session. at that point it's in Net::Ssh's hands. Anything we did that was non-uniform would lose parallel ssh sessions.

Instead, knife checks the slice and, as long as all the machines you're bootstrapping live in the same environment, sets the Chef::Config and carries on. If you have multiple environments it explains and raises an exception.

So you can still have a cluster with multiple environments, you just have to bootstrap them in groups by environment.
Ignore deleting, deleted, or errored volumes in discovery
Ignore deleting, deleted, or errored volumes in discovery
Circumvent memory bloat by resolving just once
Rename spec so that it actually runs :-/
Version bump to 4.2.1