Fix NoDevice not properly configured #2398.
Refactor the mapping builder to match BlockDeviceMapping from AWS SDK:
* If NoDevice is specified, include NoDevice only.
* If VirtualName starts with ephemeral, don't create Ebs (they are mutually
exclusive anyway)
* Otherwise, assume Ebs and create it with the exact specified attributes by
the user.
Change/add tests to reflect these changes.