Naïve leapfrog step transcription.

Doesn't know anything about traces yet.
skeleton for an hmc sampler.
Add db-update! and db-map higher-order functions.
Add update-entry-value function.
Rewrite hmc-leapfrog-proposal in terms of DB.
hmc-step and hmc-acceptance-threshold.
Add naive gradient function for hmc.
simplify hmc-sampler to rerun the calculation to get query result.
prob/viz: add bin-pict similar to hist-pict.
Scribble some docs for hmc-sampler.
Address code review comments.
Added (derivative e ds ...) special form.

The idea is that this can be used in conjunction with (label l e) to
attach derivatives to random choices.

(define a-hmc-derive
  (hmc-sampler
   (define A (label 'A (normal 0 1)))
   (define B (label 'B (normal 0 1)))
   (define C (derivative (normal (* (square A) (square B)) 1)
                         [(A B) ;; dmean/da, dmean/db
                          (λ (a b)
                            (values
                             (* 2 a (square b))
                             (* 2 b (square a))))]
                         #f))

   C))
Instead of positive? use (>/c 0).
hmc: Oops.  Record the DB from the first successful run.

Otherwise it was just rejection sampling.
hmc: Oops.  Record the DB from the first successful run.

Otherwise it was just rejection sampling.
Merge branch 'wip/hmc-sampler' into wip/hmc-label-derivs

Conflicts:
	prob/private/prob-hmc.rkt
Add dist-param-count query for distributions.
Initial implementation of hmc-gradient-potential-fn

Compute derivatives of distribution samples with respect to time using
parameter derivative annotations.

TODO #1: Memoize repeated computation of dependent random variable
      derivatives.
TODO #2: Documentation and testing.
Derivatives of potential energy with respect to random choices.
Add #:when clause to hmc-sampler.