Component groups

**Incomplete**.

Opening this now so you can track the progress of it and contribute if wanted.