This will make it possible to run background tasks in a type safe way.
Sadly, this does mean that every plugin now needs to define the type
alias and constructor function since Rust does not yet support defaults
for associated types.
Instead of the previous technically-unsound approach. While it wouldn't
cause any issues in practice, it did break Rust's guarantees. That was a
design choice after adding support for editors in NIH-plug, but this is
probably the better long term solution.
The downside is that all uses of `param.value` now need to be changed to
`param.value()`.
This solves the same problem as #27 but in a cleaner way. The previous
commits refactored the smoothing to make it possible to use the
calculations in plugin code to do the same thing as #27, but then I
realized that that doesn't make much sense since the time to decay into
complete silence isn't very meaningful for this kind of computation.
Only a couple of these functions would be needed during initialization.
In the next couple commits ProcessContext will get a way to access
auxiliary IO, so this really had to be separated.