Add ability to use validate functions on property values

- Check for and use validator functions on properties. This can be used to
  check for multiple types, bounds checking or other value coersion.
- Add some common utility validate functions and tests. Some of these are to
  provide backward compatibility for some strings used as integer properties.
Incorporate Will's property type changes

Some of the integer properties were using basestring. Fix these using
the new utility functions.
Domain does not have any properties
DefaultCacheBehavior is a required property for DistributionConfig
Added EBSBlockDevice and BlockDeviceMapping classes.
Fix CustomGateway -> CustomerGateway
Fix VPC security group rule bugs

- Fix bugs with SecurityGroupEgress and SecurityGroupIngress.
  - They are really only AWSProperty and not AWSObject derivatives.
  - They were generating bad JSON for VPC security group ingress/egress rules.
- Added workaround for AWS bug with SecurityGroupEgress rules.
  - Egress rules targeting a security group do not respect
     DestinationSecurityGroupId.
  - You have to use SourceSecurityGroupId to create these types of rules.
  - Added SourceSecurityGroupId to hash of allowed properties for
    SecurityGroupEgress.
  - This is a known AWS bug with EC2/CloudFormation APIs since mid-2012.
- This is a merge of Will's patch
Add validation of list element types

The current approach to lists of objects would just validate that a list
is being passed in. This change checks each element of the property value
against a list of types and tightens up the type checking.
Validate the Subscription policy is made up of Subscription objects
Fix pep8 whitespace
Add a post-validator to allow individual object to validate themselves

In addition to supporting validation of properties and types, this new
validator can be used when the Template is finalized (in to_json()) to
verify things like mutual exclusion of properties.
Be able to use a Ref() object as a network_port
Fix Python 3.3 compatibility
Rename util.py to validators.py
Bump version to 0.2.5 to reflect validator changes