rename Mover to MoverInterface & Mover_Impl to Mover
add StatefulMover, and convert Firework to inherit from it instead.