Fixed #175 (current spot price in spothistory)
cluster: load volume settings from master userdata

Updated load_receipt to catch MasterDoesNotExist and check for spot
requests before reraising. If spot requests are found load_receipt will
wait for the spot requests to activate, then for instances to activate,
and then attempt to refetch the master node. This properly handles the
case where you start an *all* spot cluster and cancel the start command
early on before any instances come up and then rerun the start command
with the --no-create (-x) option. In this case the code needs to wait
for the master to 'appear' before attempting to load the original
cluster settings.

closes gh-179
add --force option to terminate/stop commands

This option must be used whenever there are issues loading cluster
settings either due to an incompatible cluster or some other unknown
error.
cluster: consolidate exception handling in load_receipt

Cluster.load_receipt was performing duplicate try/catches for cluster
settings, plugins, and volumes. Moved all core load_receipt code within
a top-level try/catch block.
cluster: raise ValueError in get_tag_from_sg

Raised whenever the StarCluster security group name is invalid.
Fixed ebsimage bug

A snapshot id was being passed when a snapshot object was expected.

Caused this error:

earls3@jearls:~$ starcluster ebsimage i-14b2086a delete-me-10
StarCluster - (http://star.mit.edu/cluster) (v. 0.9999)
Software Tools for Academics and Researchers (STAR)
Please submit bug reports to starcluster@mit.edu

>>> Removing private data...
>>> Creating new EBS AMI...
>>> New EBS AMI created: ami-8345c7ea
>>> Fetching block device mapping for ami-8345c7ea
!!! ERROR - Error occurred while creating image
!!! ERROR - Unhandled exception occured
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/StarCluster-0.9999-py2.6.egg/starcluster/cli.py", line 257, in main
    sc.execute(args)
  File "/usr/local/lib/python2.6/dist-packages/StarCluster-0.9999-py2.6.egg/starcluster/commands/ebsimage.py", line 61, in execute
    **self.specified_options_dict)
  File "/usr/local/lib/python2.6/dist-packages/StarCluster-0.9999-py2.6.egg/starcluster/awsutils.py", line 773, in create_ebs_image
    return icreator.create_image(size=root_vol_size)
  File "<string>", line 2, in create_image
  File "/usr/local/lib/python2.6/dist-packages/StarCluster-0.9999-py2.6.egg/starcluster/utils.py", line 91, in wrap_f
    res = func(*arg, **kargs)
  File "/usr/local/lib/python2.6/dist-packages/StarCluster-0.9999-py2.6.egg/starcluster/image.py", line 211, in create_image
    return self._create_image_from_ebs(size)
  File "/usr/local/lib/python2.6/dist-packages/StarCluster-0.9999-py2.6.egg/starcluster/image.py", line 241, in _create_image_from_ebs
    self.ec2.wait_for_snapshot(snap)
  File "/usr/local/lib/python2.6/dist-packages/StarCluster-0.9999-py2.6.egg/starcluster/awsutils.py", line 1032, in wait_for_snapshot
    log.info("Waiting for snapshot to complete: %s" % snap.id)
AttributeError: 'unicode' object has no attribute 'id'

!!! ERROR - Oops! Looks like you've found a bug in StarCluster
!!! ERROR - Crash report written to: /home/earls3/.starcluster/logs/crash-report-14437.txt
!!! ERROR - Please remove any sensitive data from the crash report
!!! ERROR - and submit it to starcluster@mit.edu
cluster: improve exception handling in load_receipt

Raise IncompatibleCluster error on *any* uncaught exception in
Cluster.load_receipt. The full stack trace will always be logged in this
case. MasterDoesNotExist and PluginError are always reraised.
travis: enable notifications for #starcluster IRC
Added a list with the second generation instances

The 'SEC_GEN_TYPES' list contains the instances from the second generation EC2 instances, those instances have a HVM virtualization
Updated the _check_platform method

Added the second generation EC2 instances (m3) to the HVM instance check
cluster: improve keypair fetching in get_cluster

Updated ClusterManager.get_cluster() to attempt to fetch the cluster's
keypair name from the master node in the case that cl.keyname is None
due to load_receipt=False or some other failure loading cluster
metadata.
sshmaster: fetch cluster key directly from node

Updated the sshmaster command to skip loading cluster metadata and
simply load the cluster keypair based on the master node's instance
metdata. The keypair name is the only cluster metadata used by sshmaster
so it's less API calls to just fetch this info from the instance metdata
direclty.
sshnode: fetch cluster key directly from node

Updated the sshnode command to skip loading cluster metadata and simply
load the cluster keypair based on the node's instance metdata. The
keypair name is the only cluster metadata used by sshnode so it's less
API calls to just fetch this info from the node's instance metdata
directly. This is also necessary in order to login to clusters with no
master node (e.g. volumecreator clusters) given that it completely
avoids attempting to fetch any cluster metadata from the master node.
commands: reraise ClusterDoesNotExist in stop/terminate
listclusters: minor output formatting fix

Add new line after displaying an IncompatibleCluster exception message.
minor docstring updates
ipcluster: stop spinner in a finally clause
ipcluster: sleep 5 seconds when waiting for JSON

Updated from checking every 1 second to now every 5 seconds. Theres no
need to check every second given that SGE doesnt queue and run jobs that
quickly which the ipcluster plugin currently relies on.
node: minor fix to Node.parent_cluster property

Return None instead of '--UNKNOWN--' string (not sure what I was
thinking :P) in the case that the node's parent cluster could not be
determined.
node: minor InstanceNotRunning msg formatting fix

Update the instance_id and label args passed to InstanceNotRunning in
node.shell() in the case the node is the master node. This makes the
error message read slightly better in the case of the master:

!!! ERROR - master node is not running (stopped)

instead of:

!!! ERROR - node master is not running (stopped)