Support independent provisioning of EBS volumes

Previously, EBS volumes could only be created as part of an EC2
instance, meaning their lifetime was tied to the instance and they
could not be managed separately.  Now they can be provisioned
independently, e.g.:

  resources.ebsVolumes.bigdata =
    { name = "My Big Fat Data";
      region = "eu-west-1";
      zone = "eu-west-1a";
      accessKeyId = "...";
      size = 1000;
    };

Fixes issue #91.
EBS volumes: --check doesn't work yet
Fix TypeError in build_configs
Add provisioning of elastic IP addresses

Example:

  resources.elasticIPs."nixos.org" =
    { region = "eu-west-1";
      accessKeyId = "...";
    };
Fix message
Perform remote builds on a single machine

Fixes issue #103.
New convenience command ‘nixops edit’ to open the deployment spec in $EDITOR
Merge branch 'master' into next

Conflicts:
	nix/eval-machine-info.nix
	nixops/backends/__init__.py
	nixops/backends/ec2.py
	nixops/deployment.py
	scripts/nixops
Consistent log messages
Fix destroying EBS volumes / elastic IPs
Update option types

I.e. "types.uniq type.string" -> "types.str".
Typo
Allow EBS volume resources to be attached by direct reference

Meaning you can now say:

  resources.ebsVolumes.data =
    { size = 1000; ... };

  machine =
    { config, pkgs, resources, ... }:
    { deployment.targetEnv = "ec2"; ...

      fileSystems."/data" =
        { autoFormat = true;
          fsType = "ext4";
          device = "/dev/xvdh";
          ec2.disk = resources.ebsVolumes.data;
        };
    };
Make the resource name available in all resources
Set _type for all resource types
Allow using EC2 key pairs by direct reference

So you can now say (in an EC2 machine definition)

  deployment.ec2.keyPair = resources.ec2KeyPairs.my-keypair;

instead of

  deployment.ec2.keyPair = resources.ec2KeyPairs.my-keypair.name;
Allow using elastic IP resources by direct reference

Example:

  resources.elasticIPs.my-ip =
    { region = "eu-west-1"; ...
    };

  machine =
    { config, pkgs, resources, ... }:
    { deployment.targetEnv = "ec2"; ...
      deployment.ec2.elasticIPv4 = resources.elasticIPs.my-ip;
    };
Provide a method for looking up resources by name+type
Consistency
Merge branch 'next'