cbafbbec5a
Parameterize BottleBackend over PlanT (bound to BottlePlan) and CleanupT (bound to BottleCleanupPlan). DockerBottleBackend declares itself BottleBackend[DockerBottlePlan, DockerBottleCleanupPlan], which narrows every method's plan parameter to the concrete type and lets the six `assert isinstance(plan, DockerBottlePlan)` lines on launch/cleanup/provision_* go away. The dict in get_bottle_backend keeps its unparameterized BottleBackend element type so it can hold heterogeneous backend specializations.