Split the Fiber into generic and platform implementation.

This gets rid of a big chunk of #ifdef mess out of the fiber code. I don't have
a windows machine to test the windows pieces on, so it's probobly broken.

The unix implementation now uses the same QEMU trick that consists of
makecontext then sigsetjmp. On Linux longjmp is pretty resitrictive (due to
exploit prevention). I didn't like monkey patching the stackpoint register
the jmpbuf.

The code seams much simpler now, the same tests still work. Performance is the
same, although on Linux if you have long running coroutines then the switch
cost between then should be better now.