Implement CT eval of binary expressions

I totally hate this approach. It's ugly and I don't think I can
share code with the static scalar evaluation. Maybe I should use
the approach that static scalars use instead?
Implement constant expression folding as a separate pass
Const eval unary pm (as previously)
Bring static scalar AST more in line with normal AST
Bring static scalar arrays in line
Handle trait __CLASS__ in parser
Remove static_scalar_base
Add compilation state for static scalars
Compile class const refs to CONST zval
Compile const refs to CONST
Handle ::class in const expr via ast as well
Reuse expr for static_scalar
Remove obseleted grammar productions
Drop dead code