Implement ActivityModel in C++ to speedup startup time

The JS function addActiveBuffer() was contributing a bit too much
to the startup time when a bouncer spams us with playback buffers.
According to console.time() it was taking from ~1ms up to ~10ms per
call, depending on a bit which branch it ended up executing.
Reduce the feedback spam on startup

It was not only contributing a lot to the startup time, but also quite
annoying when it kept buzzing and freezing the device while a bouncer
feeds in the playback buffer and you have lots of highlights.
Improve startup time by queuing and flushing messages in batches

When connecting to a bouncer, it spams us with playback buffers.
This change makes the message model changes appear in batches
instead of each individual message triggering an update / relayout
in the attached view.