Test case to motiviate the next steps.

Blindly catching NPEs is not safe, we only want to
handle null dereferences in this expression!
Naive attempt to manually create try / catch tree.

Used the results of this REPL session verbatim:

    scala> import reflect.runtime.universe._
    import reflect.runtime.universe._

    scala> showRaw(reify ( try { "" } catch { case _: NullPointerException => null } ).tree)
    res2: String = Try(Literal(Constant("")), List(CaseDef(Typed(Ident(nme.WILDCARD), Ident(newTypeName("NullPointerException"))), EmptyTree, Literal(Constant(null)))), EmptyTree)

EXERCISE: This suffers from a lack of "Hygiene" (http://en.wikipedia.org/wiki/Hygienic_macro).
          Can you add a class definition in Test.scala causes an error in the macro expansion?
Demonstrate the lack of hygiene.

EXERCISE: Change the macro to refer to `NullPointerException` by
          Symbol, rather than by name. We sometimes refer to this as
          "being sym-ful".

          `c.universe.staticClass("fully.qualified.Name") will lookup
          the symbol; `Ident(sym)` will construct an Ident tree with the
          name of the given symbol, and with the Tree's symbol field
          already referring to that symbol. This will not be changed
          during typechecking of the expanded macro.
Use c.mirror.staticClass to hygenically refer to NPE.

NOTE: In the full compiler API, one could have written
      `val sym = requiredClass[java.lang.NullPointerException]`
      See: src/reflect/scala/reflect/internal/Mirrors.scala

EXERCISE: Now change the implementation to construct the
          Try node with QuasiQuotes.

          http://docs.scala-lang.org/overviews/macros/quasiquotes.html

          Note that quasiquotes are in the experimental
          "Macro Paridise" build only; but we hope to include
          them in Scala 2.11.

          In this project, Quasiquotes can only be used in `Helper.scala`
          you will need to create a new method in that file, and delegate
          to it. Follow the pattern in `Macros#impl`.
Use quasiquotes for try/catch generation.
Transform code to null-guard all Selects.
Use quasiquotes to pattern match on the Select node.
A variation of the transformer that manually assigns symbols.

Not strictly necessary for this macro (at least, not for the tests
we've included.) But can be a useful tool when trying to avoid
issues like:

   "Typechecking is not idempotent"
   https://issues.scala-lang.org/browse/SI-5464