kill dead param

I'm digging in here, and saw relative is always false.
escape glob

The current dir might have ##php## files in it.
Make $HPHP_HOME optional for hphp/test/run, change default bin_root()

If it's not set, let's just use git rev-parse.  If you don't
have FBMAKE_BIN_ROOT in your env, use _bin/ by default (for the last
thing you built) instead of <root>/bin/, which is only around for
perflab compat.  Made the help a little more to my liking (and not
ruin syntax highlighting in emacs).
Arrays as class constants should be a parse time fatal

We were detecting this in the emitter, which is too
late, because the definition could be optimized out by then
expose type annotation to reflection including generics, function types and tuples

This is intended so reflection can be used (via getTypehintText and getReturnTypehintText) to regenerate code the user annotated with types. Essentially using reflection to intrispect code in order to generate type safe
(hack safe) code. That is particularly important for the tools that do dependency injection. The runtime should be oblivious to the change as the rich type annotation is currently only stored for the sake of reflection. For
functions the values are in the shared portion which is cold and should also take care of traits.
fix for ConvToString

When we do CastString on an object, the ConvObjToStr helper
may throw if it does not have a __toString() function.
When spilling the stack before calling the helper,
we must push back the popped object.

Also convObjToString helper should not decref its object if the conversion failed.
Prevent some repo mode optimizations

Since its seen the whole program, it optimizes class_exists
to false if there's no definition anywhere.
Replace local variables with globals so that assignments can't
be optimized away (since we're gathering coverage information).
Fix bug in shuffleArgs

This diff fixes a bug in shuffleArgs when there
are three register arguments in a cycle, and one
of them needs a zero extend.

Assume the shuffle that needs to be performed is
rdi -> rsi, rsi -> rdx, rdx -> rdi. doRegMoves()
determines the sequence of moves to be:

  xchg rdx, rsi
  xchg rsi, rdi

Assume also that the second dest reg (rsi) needs a zero extend.
The current implementatin will spit out the code
sequence:

  xchg   %rdx, %rsi
  movzbl %sil, %esi
  xchg   %rsi, %rdi
  movzbl %sil, $esi

Basically, the problem is that if a move sequence uses
two xchg's for a cycle of three registers, we should not perform
the zero extending (and address-lea) till both the exchanges are done.
Fix order of evaluation for unused binary operators

eg

  (new X) == (new X);

Was converted to something like:

  (new X);
  (new X);

Which calls the destructor for the first X before constructing the second.

I tried a fix where we used an ExpressionList with ListKindLeft, which
would preserve both expressions until after both objects are created;
but that ends up calling the second object's destructor first. Thats
much better; its not clear to me that there's any guarantee about which
object's destructor is called first when they both go out of scope at
the same point; but currently hhvm and zend seem to aggree, so Im
going with a solution that preserves the left-to-right order.
Prevent more optimizations in repo mode

"$unused_local = UndefinedConstant;" was being optimized away, so
we didnt get a warning for the constant. return it instead.

  $unused_local = new Object;
  return;

became

  new Object;
  return;

This affected the (unspecified) order of destruction of $this
vs $unused_local. Since we're specifically trying to test that
we dont crash when a local generates a backtrace after $this
has been destroyed, force the variable to be used.
Add 'convenience' name aliases to test/run

This was the main feature in my wrapper script.  Allows
running tests by more terse names.