Turn on all warnings in Makefile.

Make all warnings go away.
Change fiber_create and fiber_join to macros.

We insert __builtin_frame_address(0) calls at the callsite of fiber_create and
fiber_join. This will ensure the caller will have a frame pointer.
Avoid using "return" to jump between frames.

Because each function has different epilogs (different registers to restore,
some use leave instruction to pop rbp, some directly decrement rsp),
it is unsafe to use "return" to jump between frames.
Modify how a thread restarts (back to stealing).

Origianlly, a thread go back to stealing by jumping into a position in the
middle of the steal function. This is unsafe because local variables of steal
could be allocated to registers and the thread jumping into it carries the wrong
register values. The new approach is to make the thread call steal rather than
jumping into it. This ensures we always have correct register values.