helper/schema: TypeSet - Sets!

This introduces the `TypeSet` type to `helper/schema`. Sets are lists that are unordered and have only unique items in them. The usage is simple:

```
"ports": &schema.Schema{
    Type: schema.TypeSet,
    Elem: &schema.Schema{Type: schema.TypeInt},
    Set: func(a interface{}) int { return a.(int) }
}
```

You must set the type to `TypeSet` and then specify a hashing function in the `Set` element. This gets the item and must return a hash code to uniquely identify that item. 

When doing a `Get` on a set item, `helper/schema.ResourceData` will return a `*schema.Set` type (as opposed to an `[]interface{}` for lists). This set can be used to perform standard set operations such as union, intersection, difference. You can also just get a list of items out of that.

The bad news is that the implementation of `Get` for sets has some horrible performance characteristics. In the context of Terraform it likely will never be noticeable since these are happening in the midst of resource updates. The good news [about the bad news] is that the unit tests should cover all cases and so refactoring for performance one day should be easily within the realm of possibility.