comb should take delay as a function arg
let's see if we get away with aggressive opt
note_c's now take args + simplefm

note_c functions now take *optional* arguments:

nargs is the number of dargs (by default 0)
dargs is valid ONLY for the duration of the inital call
It should be used for setting up things in the let only!
In other words DON'T use dargs in the body of the returned
closure

nargs and dargs become valid if either note or play-note
take extra *optional* arguments.

;; simplefm
(bind-func simplefm_note_c
  (lambda (nargs:i64 dargs:double*)
    (let ((o1 (osc_c 0.0))
          (o2 (osc_c 0.0))
          (I (if (> nargs 0) (pref dargs 0) 0.1)) ;; modulation index (generally 0.0-1.0)
          (H (if (> nargs 1) (pref dargs 1) 10.0)) ;; harmonicity ratio (whole numbers 1.0 - 20.0)
          (res 0.0))
      (lambda (time:double chan:double freq:double amp:double)
        (if (< chan 0.5)
            (set! res (o1 (* (/ 5.0 (log freq)) amp)
                          (+ freq
                             (o2 (* (* H freq) I)
                                 (* H freq))))))
        (* 3.0 res)))))

;; calling
;; I = 0.5 H = 2.0
(play-note (now) simplefm 60 80 44100 0.5 2.0)
moved play macro to instrument (with play-note etc.)
updated to agree with new note api changes