Turbopack: Define `Effect` as a trait instead of a closure (#89080)
This switches effects (special `Collectible`s used to defer file writes) from using a closure representation to using a trait representation.
This makes constructing effects a little more annoying, but it ensures that we'll be able to correctly implement `TraceRawVcs` on these in a subsequent PR.
Changes to `turbo-tasks/src/effect.rs` were done by hand, an LLM was used for updating the two callsites.