Remove FiberData handling from FiberStacks

By using FiberStacks as the point to GC FiberData structures, this was
keeping Fibers alive that went out of scope and would never resume
anymore. This would result in an effective memory leak since this data
would never be cleaned up.

Take for example the following code:

def foo
  fiber = Fiber.new { Fiber.yield }
end

The fiber local here goes out of scope and should be GC'ed. But since it
never finished, the previous logic would keep this alive and the fiber
would never be garbage collected.

Moving the logic to Fiber itself makes this much more simple and also
GC's this fiber properly for this case.
Run at least one command through the server

This prevents a race when we try to kill / stop it when it hasn't even
properly started yet.