Cherry-pickable fix for {N,}Same array bug

Summary: This is a very simple fix; I'll see what can be done better in another
diff.

Reviewed By: @markw65

Differential Revision: D1728829
Rename typeArithSetOp to typeSetOp

Summary: All the other type-arith.h functions just have 'type' as a prefix.

Reviewed By: @alexmalyshev

Differential Revision: D1728841
Rename type-arith.{h,cpp} to type-ops.{h,cpp}

Summary: I'm going to add a type comparison function, and having a whole new
module for type-comparisons doesn't seem needed yet.  (Can split later if both
get bigger.)

Reviewed By: @alexmalyshev

Differential Revision: D1728858
Add type{N,}Same, to do {N,}Same on types; handle staticness correctly

Summary: We can't just directly use couldBe the way the old code did, because
the type system doesn't exactly map to php "same" semantics.  The old code was
also confused about calling couldBe twice: couldBe is symmetric.

Reviewed By: @alexmalyshev

Differential Revision: D1728880
Add a comment explaining why interp-minstr couldBe(sempty()) use is safe

Summary: An audit of couldBe wrt accidently asking about reference countedness
only found this case, which is correct right now because TStr.couldBe(sempty())
is true.  Explain it in a comment; we'll have to change it if we do the
mentioned task.

Reviewed By: @edwinsmith

Differential Revision: D1728928