Preserve stacktraces, simplify eventloop
Preserve stacktraces, simplify eventloop

These changes preserve the stacktrace of an exception
thrown by a greenlet spawned in the eventloop by using
g.get() instead of gevent.joinall().

There are also some simplifications:

* AsyncResult is no longer necessary because we use .get()
* self._greenlets is now a list instead of a set
  (uniqueness was always guaranteed)
* enter_idle() and remove_enter_idle() now just use the callback
  as the key (why standard mainloop does it with indices I have no
  clue, during testing the idle_callback list was at most 1 in size
  so it can't be performance)
* _run() has been inlined in run()
* greenlets are now removed in run()
  This was done to prevent a potential race condition
  introduced with the changes above, where
  _greenlet_completed() would discard
  a greenlet from self._greenlets while run() was iterating
  through that list (not a problem in the previous version)

what-studio/urwid-geventloop