move BaseAMIProtocol into its own module (API break!)