Sticky Session Implementation

Session Affinity implementation - see Issue #2867.  
pkg/proxy
- Added two new methods to loadbalancer interface.  1. NewService (service name, sessionAffinityType).  2. CleanupStaleStickySessions(service name, max sticky session age in minutes).  
- roundrobin.go - added implementation for the above two methods.  Also added a couple new structs to hold the hash map to maintain affinity between clients and endpoints.
- proxier.go - call LB.NewService with session affinity type when there are changes to the services (default affinity type is none).  Also call the LB.CleanupStaleStickySessions as part of the SyncLoop

pkg/cloudprovider & pkg/registry/service/rest.go
 - If the service definition has CreateExternalLoadBalancer we need to tell the cloud provider to create the LB with session affinity if required.  These changes will automatically set cloud provided load balancer for sticky session if the service requires it - Note, this only works on GCE right now.
This is needed because the affinity hash map is not synced up between each service node so if the external LB sends the first request to node one, the next request will hit the service proxy on node 2 which does not have the hash map to know this request needs to be serviced by POD 1.  I had originally planned to sync up the hash map between each service, but I don't think that will work because the browser will send multiple requests at the same time so if there is a lag in syncing up the maps each service proxy will create their own affinity map for this client IP.

Let me know if I'm missing something here or if there is a way to better handle this.  I would love to be able to remove this additional requirement.