schedule instances according to processor, accelerator, and network architecture

Nova should have support for cpu architectures, accelerator architectures, and network interfaces and be able to route run_instances() requests to a compute node capable of running that architecture. In addition, nova should prevent a user from inadvertently specifying, for example, an x86_64 machine image to run on a Power7 compute node or vice-versa. The scheduler should check for inconsistencies.