Split inner ref type checks into a separate instruction from LdRef

Reviewed By: @ottoni

Differential Revision: D1684090
Fix some not-type-safe LdRef code generated in a situation with SetOpL

Summary: SetOpL for concat was passing a nullptr for the ldrefExit, claiming it
was because it already guarded.  But this is reason is suspect, because
ConcatCellCell can call arbitrary code via an object __toString.  With the
nullptr, in trunk we generate a LdRef<Str> without a taken branch on a
BoxedCell that may not contain a Str, which means we have a value in the IR
that is potentially mistyped.  Good news is that since it's immediately
followed by a StRef, we'll never use it (as frame state will immediately wipe
out any tracked copies of it), but it's still not ok.

This diff just fixes the comment and modifies stLocNRC to not load the old
inner cell for this situation, so we don't need the guard for a legitimate
reason.

Reviewed By: @swtaarrs

Differential Revision: D1684096
Use specializeExact whenever we know AttrNoOverride from whole program analysis

Summary: I saw that sometimes we have types for LdThis that thinks there can be
subclasses, even if it's an AttrNoOverride.  This will help in some
intersection operations (which will help with getting better may-alias sets for
properties eventually).

Reviewed By: @ottoni

Differential Revision: D1684099
Separate checking whether a Ctx is a $this pointer from loading it

Summary: Use LdCtx to load a Ctx, and add some instructions to check if it is a
non-null $this pointer or cast it to a particular object type.  This diff
doesn't try to address some refcount opts dependencies on the optimizations
relating to $this---as far as I can tell it should be preserving the existing
behavior over there, but I added some TODOs on simplifier and preOptimize rules
it depends on.

Reviewed By: @ottoni

Differential Revision: D1684191
Add place to put code (ldCtx for now) that runs on region entry post-guards

Summary: A long time ago the IR used to hoist a LdLoc for every local like
this---it might make sense to bring that back too?

Reviewed By: @alexmalyshev

Differential Revision: D1684203
Remove some cgLoad taken() cases that aren't used

Summary: Copy&paste or old instructions that used to be maybe-guarded loads.

Reviewed By: @ottoni

Differential Revision: D1684290
Remove LdClsCns---replace with LdRDSAddr and a pointer type

Summary: This lets us use the various check and load instructions we have that
operate on pointers to do the type check.

Reviewed By: @ottoni

Differential Revision: D1684291
Remove LdClsPropAddrKnown---use LdRDSAddr instead

Summary: We already have a pointer type, so we can do the lea this way.

Reviewed By: @alexmalyshev

Differential Revision: D1684293

Signature: t1:1684293:1416428482:3f07d003f483145086ecfd2e967687e07d849428
Remove remaining code relating to optionally guarded loads

Summary: LdLocPseudoMain is the only one left, but it has a manditory branch.
Remove some stuff in dce and findDefiningBlock and stuff about it from the
spec.

Reviewed By: @ottoni

Differential Revision: D1684294
Rename cgLoad/cgStore to emitLoad/emitStore

Summary: Should only use the "cg" prefix on functions corresponding to IR
instructions.

Reviewed By: @edwinsmith

Differential Revision: D1684295

Signature: t1:1684295:1416237874:eba49b145cdd551c5c281263828272613a06dc81