compiler: Clean up Scope

- Use a more succinct definiition for Scope.get

- Remove Scope.+ and ++. It's unused and will create a new sibling Scope
  implicitly. This seems unlikely to be useful.
compiler: Add forward type declarations

This adds support for ":" with approximately the same semantics as in
Typed Racket. This isn't quite as nice as (define:) or (let:) for simple
variable declarations but it is useful for annotating with complex
function types once those are supported.