re-wrote ccall code to use libffi rather than my horriblly hacked
together thing.

I also did a bit of modification to build stuff, I added an option for
lto which defaults to on for gcc, and off otherwise. I added a check for
libffi and I re-added an include directory (mostly for the libffi .h
files which aren't in the default include path)