Refactored Register and PoweredDevice classes

PoweredDevice now exposes an interface to be called by the outside world
while requiring classes deriving from it to implement their specific power
behavior. I think this will allow use of PoweredDevices to be cleaner. Consider
having a vector of PoweredDevices. Now you can call powerOn() on each device
and each device will just do the right thing. This would be harder to achieve with
composition. Also, by eschewing overriding functions  or re-implenting virtual functions
in the derived class, the derived class will still reap the benefits of behavior
that should be common to all PoweredDevices, like keeping track of the current power state.

Hopefully this makes sense and I'm not just long-windedly justifying this for nothing.