Stop doing sketchy guard optimization in pushStLoc

Summary: I feel this optimization has always been a little dodgy, but it hasn't
bitten us until we started trying to jit loops.

The high-level overview is that the loosened guards resulting from
passing DataTypeGeneric here cause breakage when it happens inside a
loop, if the truth value of the condition the loop is guarding changes
inside the loop.

Reviewed By: @swtaarrs

Differential Revision: D1473217
Implement RecursiveCallbackFilterIterator

Summary: Fixes #1894
Closes https://github.com/facebook/hhvm/pull/3350

Reviewed By: @LiraNuna

Differential Revision: D1475169

Pulled By: svcscm
Fix out-of-tree builds rebuilding too much

Summary: This fixes out-of-tree builds rebuilding things that are already built.  I believe this was missing from 3f3ee1aab336d2194ca79871810e6abdbdf5717b
Closes https://github.com/facebook/hhvm/pull/3354

Reviewed By: @LiraNuna

Differential Revision: D1475785

Pulled By: svcscm
Add cygwin to ifdef blocks

Summary: | data |Several places that are already checking for apple need to also check for cygwin, since the workarounds (such as turning off jit or disabling some elfwriter code) are the same for both OS's

Some of these may need to be expanded even more - it may be helpful in the future to define a "linux" for
not apple, not bsd, not windows in cygwin, mingw, or msvc flavors to avoid really convoluted ifdef lines

Reviewed By: @JoelMarcey

Differential Revision: D1464299
Windows header fun

Summary: Windows headers are not well behaved

VOID
STRICT
ERROR

are all defined - this finds the places where they clash and undefs them if necessary after the includes (sigh)

also fixes a header included twice that was making lint angry

Reviewed By: @JoelMarcey

Differential Revision: D1459782