Initial framework for external volumes. 

Lays the framework for external volume mounts, preparing for 
persistent disks and other volumes.

Currently, it only supports host directory mounts and empty directories.

Modifies the API to support mounts from Volumes
instead of VolumeMounts.

Yeah, I meant an interface{}. And no reflection should be required; it'd be as simple as:
switch concrete := volume.VolumeSource.(type) {
case api.EmptyDir: ...
case api.HostDir: ...
default:
  // reject invalid VolumeSource
}

Hm, complication: I keep forgetting that encoding/json doesn't have gob's http://golang.org/pkg/encoding/gob/#Register. That may mean we'd have to implement http://golang.org/pkg/encoding/json/#Unmarshaler to make it work. At any rate, this can be changed when we accumulate some more volume sources.