Move virtual interface from AbstractBarcode to its private class
This was never meant to be inheritable for external consumers anyway, so no need to expose that, and that way we are not constrained by ABI compatibility here anymore.
This also means AbstractBarcode is no longer a polymorphic type and thus could become a move-only or implicitly shared value type (and then would probably better named just "Barcode").