Strict rebuild needs to be a dependency semantic

When using non-strict build planning modes; we have a catch all flag which is set by the element type to ensure that things get rebuilt in a strict way regardless of whether strict mode is active.

This is currently used for elements like compose, which need to recompose anyway even if not everything it composed was rebuilt in a session.

This works well when:

  • Static libraries are never linked
  • Header files in dependencies are really only API headers, and not macros which need re-expansion or inline functions which need to be recompiled against

To improve this; elements should be able to specify strict-rebuild directly on the dependencies they depend on - i.e. if an element depends on another element for a static library; it can depend on it "strictly".