Partially fixing release portion of notes played interactively
Partially fixing release portion of notes played interactively

Previously, the release portion of the envelope could be prevented
from playing if the note was note held long enough to go through
the attack and decay portions of the envelope. I _think_ the reason
was that `cancelScheduledValues()` was resetting the gain to 0, which
caused the release to have no effect.

The solution is to simulate `cancelAndHoldAtTime()`. The ideal
solution would be to use `cancelAndHoldAtTime()` directly, but it's
not supported in most browsers at the time of this commit. (Currently
seems like only Chrome and Opera?)

This is a partial fix because it works in Chrome and Safari, but not
Firefox. The reason seems to be that Firefox is not updating the
value of the gain's value in real time, so it doesn't set the gain
value at the start of the release to the correct value. Instead, it
seems like the _real_ fix might be to manually calculate what the
gain at the current time should be, and use that.

Also, this doesn't change the release portion of the filter
envelope, but maybe it should too?

jstrait/jssynth,jstrait/jssynth