Support GCC/LLVM stack-smashing protection

Summary: Turn it on with `cmake -DENABLE_SSP=1` Protection buffer/stack overflow exploits.

Starting with version GCC 4.9 there is support for more advanced protection from overflows `-fstack-protector-strong` (minor loss of performance), the version below only support `-fstack-protector`.
LLVM 3.6 supports `-fstack-protector-strong` prior to this worked as a stripped-down option `-fstack-protector`.

This option protects the stack from overflowing/exploiting/debug and implementation process for laying.
RHEL, CentOS, Ubuntu uses these options to build all binary deb packages in the delivery.

This optional (default=disabled), need more testing.

More info:
- [RELRO: RELocation Read-Only](https://isisblogs.poly.edu/2011/06/01/relro-relocation-read-only/)
- [Improve your software security with GCC Stack Protector Strong](http://www.simonroses.com/2013/04/appsec-improve-your-software-security-with-gcc-stack-protector-strong/)
- [Hardening overflowing/exploiting/debug](https://wiki.debian.org/Hardening#Stack_
Closes https://github.com/facebook/hhvm/pull/4091

Reviewed By: @sgolemon

Differential Revision: D1646057

Signature: t1:1646057:1415053149:366a56d35c1298db8192bb291c55f183b4c2f95f
Adding check for creating function called __construct

Summary: The typechecker allowed creating a function called `__construct`
outside of class scope. This change disallows creating
a function with name `__construct`.

Reviewed By: @jwatzman

Differential Revision: D1648756