Rework of C2 bus layer to a more abstract design

Did some major rework on the C2 bus layer to allow easier addition of new C2
Bus interfaces. And it is now possible to choose the C2 bus layer at runtime
instead of compile time.