[Makefile] Let user override compiler
Define Max_U* macros for C99
WIP struct! is hooked up
WIP MT_Struct works

however seg fault occures when being GC'ed
Do not recursively GC bare series

The BARE flag is supposed to designate the series doesn't link to
GC'able elements. However, this is not used anywhere except the new
t-struct.c, so it shouldn't break anything.
Set field/data serieses to be BARE

Such that their elements will not be GC'ed, or it will crash with
RP_UNEXPECTED_END, because struct_field happens to have the same size as
REBVAL.
Copy only changable series

This should save some memory
Correct the length of struct! member

SERIES_LEN includes the terminator
Struct! supports length? action
Implement change action to struct!

It changes the binary data of the struct
Implement reflect action to struct!

reflect a 'values now returns binary representation of the struct!
Add -ffloat-store to prevent precision problems

The problem is that when using 32-bit R3 interpreter (compiled with O2),
>> round/to 0.6000000000000001 0.1
== 0.6000000000000001
(the internal floating number is: 0.600000000000000088817841970013, 0x3fe3333333333334)

While compiled with O1 (less optimized), it gives the result "as expected"
>> round/to 0.6000000000000001 0.1
== 0.6
(the internal floating number is: 0.599999999999999977795539507497, 0x3fe3333333333333)

The only difference is that last bit is rounded up in "O2" version.

Reference: http://stackoverflow.com/questions/7517588/different-floating-point-result-with-optimization-enabled-compiler-bug
Reading members of struct! works

More testing is still needed
Struct member access works

Set path will set the struct members:

>> a: make struct! [struct! [uint8 [2] a: [1 2]] [3] sa]
>> a/sa/1/a/1: 10
== 10

>> a/sa/1/a/1
== 10

>> values-of a
== #{0A0000000000}
Spread all elements in a struct array with the initial value

This makes it more consistent with the output of "spec-of struct"
Check the size of nested struct while setting values

This prevents invalid assignments
Mold struct! works

more testing is needed
Fix a crash in mold

fix the crash caused by
>> a: make struct! [uint8 a: 1]
>> b: make struct! compose [(a) sa]
>> mold b
Reduce the initialization block

Or the dimension will be wrong. This makes it possible to reevaluate the
string returned from "mold"
Compare struct types before assignment