Separating BsonProtocol from ModelCompanion