Let drivers override default rebuild() behaviour

The rebuild compute method currently makes separate calls to destroy()
and spawn(), but this introduces race conditions with drivers where
another compute process could claim the VM resources between destroy
and spawn. This is a particular problem for baremetal where the
planned ephemeral preservation feature requires that the rebuild
happen on the same physical node.

Partial-Bug: #1174154
blueprint: baremetal-preserve-ephemeral
Co-Authored-By: Robert Collins <rbtcollins@hp.com>
Co-Authored-By: Joe Gordon <joe.gordon0@gmail.com>

Change-Id: I5fadc27207ed5725ecf0cf6bc34a52a95af42679
Merge "Let drivers override default rebuild() behaviour"