iASL: Add support for C-style operators and expressions.

This change creates an extension to the ASL language that introduces
the use of a C-like syntax and C symbols for both the math and
logical operations.

Note: Does not create new AML opcodes that would need to be implemented
by an AML interpreter. It simply adds new operators and related syntax
to the ASL parser.

Note: This language extension can exist concurrently with the existing ASL syntax.

Compiler support only, dissasembler support is under development.

Examples of the new syntax, each followed by the corresponding legacy ASL syntax:

(New syntax) --> (Legacy syntax)

// Math operators

Z = X + Y --> Add (X, Y, Z)
Z = X - Y --> Subtract (X, Y, Z)
Z = X * Y --> Multiply (X, Y, Z)
Z = X / Y --> Divide (X, Y, , Z)
Z = X % Y --> Mod (X, Y, Z)

Z = X << Y --> ShiftLeft (X, Y, Z)
Z = X >> Y --> ShiftRight (X, Y, Z)

Z = X & Y --> And (X, Y, Z)
Z = X | Y --> Or (X, Y, Z)
Z = X ^ Y --> Xor (X, Y, Z)

X++ --> Increment (X)
X-- --> Decrement (X)

Z = ~X --> Not (X, Z)

// Store/Assignment operations

X = Y --> Store (Y, X)
X += Y --> Add (X, Y, X)
X -= Y --> Subtract (X, Y, X)
X *= Y --> Multiply (X, Y, X)
X /= Y --> Divide (X, Y, , X)
X %= Y --> Mod (X, Y, X)
X <<= Y --> ShiftLeft (X, Y, X)
X >>= Y --> ShiftRight (X, Y, X)
X &= Y --> And (X, Y, X)
X |= Y --> Or (X, Y, X)
X ^= Y --> Xor (X, Y, X)

// Logical operators

(X == Y) --> LEqual (X, Y)
(X != Y) --> LNotEqual (X, Y)
(X < Y) --> LLess (X, Y)
(X > Y) --> LGreater (X, Y)
(X <= Y) --> LLessEqual (X, Y)
(X >= Y) --> LGreaterEqual (X, Y)
(X && Y) --> LAnd (X, Y)
(X || Y) --> LOr (X, Y)
(!X) --> LNot (X)