Piezo class API refactor as discused in #372
Make sure that noTone cancels the tone timer

Note the failing test.  this.clock.tick() doesn’t work for us here
because Piezo uses nanotimer.  I can’t figure out how to progress the
clock to make the test pass.
reworking the test so that the nanotimer can fire and we can test that tones get destroyed
Make sure that existing timers get cleared when new tones are played
Creating a frequency function so that we can use the piezo with note frequencies

When someone wants to play the note A, it is common for them to use the
frequency (440) instead of the obscure duty cycle (1136).  This gives a
convenience function to achieve that.
Fixing merge problem
Use frequencies for notes instead of duty cycles
Remove the race condition with clearing the timers.  Because stopping the tone was based on a timeout.  Two consecutive notes could cause the first timer to clear, but then the callback would clear the next (wrong) timer.
Altering `Piezo` to be able to take song notes without beats (default 1), notes as frequencies, or even a single note not in an array. Tests accordingly.
Making the `tempo` attribute of `tune` on `Piezo.play` be a BPM tempo instead of ms indication. Tested.
Added callback parameter to `Piezo.play`.
Change beat to fractional values