UI hooks first implementation

This implements what was discussed in https://github.com/my-koop/service.website/issues/185 with some removed, some added, depending on our current needs.

There is a small amount of "duplicated" logic, but I tried to avoid it as much as possible while keeping the flow obvious and things readable. Both for the navigation bar and the side bar, there is a hard limit of 2 levels for the time being, no recursive traversal is done.

Turns out https://github.com/my-koop/service.website/issues/302 was an easy fix, so it's part of this too.

Once this is merged, modules will **need** to provide UI hooks, or the site menus will be naked/empty. While we discuss this PR, it is possible for other modules to start defining UI hook metadata while still using the "old core" so things fall into place nicely after this is integrated. (Technically that is actually generally true for all new types of metadata we intend on implementing)
what is the reason behind doing a cloneDeep here? I thought permissions were immutable