Perform: Distinguishing between different child elements in perform

When forwarding pointer events to children, it makes sure the invariant
that the trace of pointer-* events is always in the language of
down.move*.up is maintained for the children. (Assuming it is maintained
for itself by the cursor).

Additionally, the performance layer can now be locked, which should
prevent the stickiness of input elements from changing (during the
performance itself), whilst they can be modified during setup.

Finally, the Setup mode has been reintroduced, as an unlocked
performance layer mode, to allow for modifications to the stickiness of
input elements.