A whole marathon of Indirect Instancing changes:
- Schedule all jobs at the beginning of LateUpdate() for better worker utilisation.
- Further improve scheduling behavior by modeling actual dependencies between jobs using writes_to_* and reads_from_* handles.
- Allow instance reordering and command aggregation to run in paralell to give even more flexibility to the scheduler.
- Run the debug overlay (where possible) in parallel with the jobs to improve performance
- Avoid garbage allocation when scheduling the frustum culling job. (GeometryUtility.CalculateFrustumPlanes)
- Schedule all jobs using ScheduleByRef.
- Correctly set `[ReadOnly]` and `readonly` for all jobs to help Burst as much as possible.
- Make batch size tunable: `indirect_instancing.batches_per_worker`
- Add somewhat automatic instrumentation to CrudeProfiler via `using` statements.
- Add ProfilerMarker to mimic what Unity 6 is doing with `using` statements. (Still need to verify it this compiles out properly.)
- Add more profiler instrumentation.
- Rename a ton of things for clarity.
- Remove CommandBuffer. We won't need it where we're going.