Test simulation with multiple controllers + switch

This commit fixes a few bugs: (1) controllers used to announce
the max of its own ID and its own leader ID. This means even after
a leader goes down, its legacy continues forever. (2) switches
weren't actually reporting violation, because std::list's merge
function apparently mutates its arguments.

As of this commit, however, the simulation is still failing
(i.e. the switch is reporting violation). This is because a DDC-level
assertion is failing, which means one of the controllers is not
receiving packets from another controllers for some reason.