Fix #804: Delay protect() mechanism until desugaring.

This also fixes the issue that a Select(_, _) was not
protected.
Follow up on #804: do not emit raw JSApply's from the compiler.

The compiler now emits JSFunctionApply, JSDotMethodApply or
JSBracketMethodApply instead of raw JSApply's.
Merge pull request #806 from sjrd/delay-protect-to-desugar

Fix #804: Delay protect() mechanism until desugaring.