added static protocol for passing addrs, observations

The static protocol is closer to the transformation in
the Bher paper, except it adds another argument for
observations, and it falls back to a dynamic protocol
for better interoperability with uninstrumented functions.

Changed dynamic protocol to use immediate continuation
mark for observations.
delete typed version (for now)
better logging etc for contracted functions
remove dependence on internal contract details
report bad structural choice in gibbs/slice error
fix apply/delimit initial address
instrument: handle module* and #%declare
rename observe-at -> observe-sample
added observe/fail
tweak docs, add todo notes for smarter observe/fail
split instrument-analysis into multiple modules
error if observe subexpression not observable

(uses MAY static analysis, won't predict all observation
problems)
add helper modules for prob/typed
Revert "delete typed version (for now)"

This reverts commit d14ecd67ae16651faa39e75eb37e2203529fa960.
update prob/typed

Now type checking happens before instrumentation, so using
typed prob should be just like using TR. Instrumentation conflicts
with the optimizer, so it's disabled for now.

Inserting the instrumentor into the TR chain before the production
of the typed submod requires replacing the TR #%module-begin form,
and the internal interfaces have shifted slightly over the last
few releases. Hacky workaround: version-specific includes to get
the right bit of code.
prob/typed: support Racket 6.1.1
prob/typed: instrument after optimizer
more observe examples in docs, demonstrate analysis
fiddle with adaptive drift goal again
update todo