racket/gui Cocoa: repairs for Cairo and Pango

 * Fix a clipped-rendering problem for text in Cairo.

 * Fix Pango's CoreText back-end to support non-BMP characters.

   Note that Emoji characters still do not render. Cairo uses
   CGContextShowGlyphsWithAdvances() to draw glyphs, but it
   would need to use CTFontDrawGlyphs() to make Emoji work.
   (Mozilla has a patch to do that for some older version
   of Cairo, so look there if it seems worth doing one day.)

 * Disable Pango's CoreText font fallbacks in favor of the
   Racket-implemented fallback.

   This is not obviously a good idea, but it restore the
   `racket/draw` hack of prefering "Arial Unicode MS". Otherwise,
   various symbol glyphs are chosen badly, such as #\u273A,
   at least on my machine.

 * Drop the clusters argument to `pango_cairo_show_glyph_string`,
   which turns out to be unnecessary.
fix excessive correction of bounding

Commit 69984fb231 extended glyph bounding boxes in the wrong
(pre-scaled) coordinate system.
racket/draw Cocoa: hack to make Courier New work in 10.{7,8}

The bounding box in the Courier New font is wrong in Mac OS X
10.7 and 10.8. Recognize that combination and make the bounding
box bigger as a workaround.
all necessary changes to check references to uninitialized letrec variables

includes a new pass, letrec_check, two new primitives, and
changes to packages that grabbed the letrec undefined value
updated tests for letrec
fix some uses of not-yet-defined fields
JIT-inline `check-not-undefined`
install test suite
removing debugging code
doc tweaks
fix a bug in the handling/setup of definitions-canvas
adjust drracket frame startup to conform to new checks

I don't think that there was a bug behind this change. There may
have been and it is probably now easier to reason about this code
than it was before, but I think that this code was probably using
object?, not checking directly with undefined) properly.
move internal `undefined` to `unsafe-undefined`
adjust some classes to avoid chaperones
reduce `racket/undefined` to just `undefined`
adjust DrRacket to work with the new undefined semantics

by completely cheating and initializing the troublesome fields
with a new variation on undefined and turning the definitions
into set!s.
fix Windows projects for new file
remove unnecessary "return;"s

Some compilers particularly dislike

 return function_that_returns_void();
fix for Gtk back-end
removing dead code in fun.c