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.

I don't think an Interface would work well here or even when we pass the api parameters to the internal volume representation. If we choose to use an interface here, I think we can only unmarshal to an empty interface{}. This would either require a whole lot of reflection to differentiate types or a method(s) that exposes members of the struct in an array/map. This also becomes more difficult to validate since we wont have access to members directly.