Move watch filter into storage level

Fix #2663  @smarterclayton 
ENOERROR

----- Original Message -----
> >  	version, err := tools.ParseWatchResourceVersion(resourceVersion, "pod")
> >  	if err != nil {
> >  		return nil, err
> >  	}
> >  	key := makePodListKey(ctx)
> >  	return r.WatchList(key, version, func(obj runtime.Object) bool {
> > -		switch t := obj.(type) {
> > -		case *api.Pod:
> > -			return filter(t)
> > -		default:
> > -			// Must be an error
> > +		podObj, ok := obj.(*api.Pod)
> > +		if !ok {
> > +			// This really shouldn't happen - must be an error.
> 
> Errors are a thing and they are known to happen.
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/2665/files#r21128159