Refactor to open-closed for new kinds of BottleNumber

New classes must adhere to the naming convention BottleNumber<digit>