Fix build errors when compiling `let` under ARC

Created a KW_LET_REF macro to abstract the complexity of getting
pointer to a __block variable on the heap. It works like so:

    (__autoreleasing id *)      /* (5) cast result as `id *` */
    (
      (void *(^)(void))         /* (3) cast back to a block */
      KW_ARC_AUTORELEASE(       /* (2) if not ARC, autorelease the block */
        [^{
          void *ref = &var; return ref;
        } copy]                 /* (1) block returns a pointer to a copied block object */
      )
    )()                         /* (4) invoke the block immediately */

This resolves two issues that occurred under ARC:

- Using `__autoreleasing id *` to capture a reference to a `__block id`
  variable gave this error:

      initializing '__autoreleasing id *' with an expression of type
      '__strong id *' changes retain/release properties of pointer

  Changing to `__strong id *` yielded this:

      passing address of non-local object to __autoreleasing parameter for
      write-back

  Using `void *` opts us out of reference counting, resolving the errors.

- Switching to `copy` instead of `Block_copy` caused the static analyser
  to reveal an issue where the block is never released when compiled
  without ARC. Added the KW_ARC_AUTORELEASE macro that wraps the block
  in a call to `autorelease` when ARC is not present.
Merge pull request #413 from sharplet/let-ARC-fix

Fix build errors when compiling `let` under ARC