adds ex_security_group_ids to ec2 in order to be able to launch nodes with security groups on a VPC

Due to amazon having a different param for the security groups on an instance launched on a VPC and libcloud already supports VPCs (ex_subnet) this is the piece is missing to support the security groups on a VPC node

- adds a ex_security_group_ids kwarg which is a list of security group ids
- checks for the existence of ex_subnet if ex_security_group_ids is called, as it depends on it to make sense
- adds a test to see if the params are being constructed correctly

EC2 API page: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RunInstances.html
```
SecurityGroupId.n
One or more security group IDs. You can create a security group using CreateSecurityGroup.
Type: String
Default: Amazon EC2 uses the default security group.
Required: No
```
```
SecurityGroup.n
[EC2-Classic, default VPC] One or more security group names. For a nondefault VPC, you must use SecurityGroupId.n.
Type: String
Default: Amazon EC2 uses the default security group.
Required: No
```
That's probably because you were actually calling the method yourself and not just passing a callable to `assertRaises` (you should only pass callable + arguments to assertRaises and let assetRaises call the callable).

For example:

```python
self.assertRaises(ValueError, myfunc(blah, foo=bar))
```

Not good because you are calling the function yourself.

For example:

```python
self.assertRaises(ValueError, myfunc, blah, foo=bar)
```

Good - you are letting assertRaises call the function and intercept the exceptions.