fancy EDSL syntax using RebindableSyntax

- rebind Haskell's if-then-else both as expression-level and
  contract-level if-then-else expression
- rebind do-notation as let bindings
- rebind Boolean and comparison operator as corresponding operators in
  the expression language