gevent-powered pools and threads
added UnboundedThreadPoolExecutor (+ tests)
add UnboundedThreadPoolExecutor to docs
add `wait` parameter to Promise.executor
raise MiraiError on improper argument types
WIP: tutorial scripts
collect, join, select: Don't spawn thread + remove timeout arg

@duckworthd Here's a better impl of collect than the simple reduce impl
we discussed yesterday, which I realized had a bad behavior where a
fast-failing future at the end of the list wouldn't fail the collected
future until all futures before it were fulfilled, since they were
chained left to right using reduce.

I also went ahead and added a new impl for select, along similar lines.
Both follow the twitter/util impls pretty closely.
Fix collect([]) + add test
Merge pull request #7 from jdanbrown/collect-join-select-no-timeout-no-thread

collect, join, select: Don't spawn thread + remove timeout arg
Simplify setvalue/setexception: Use `with self._lock`
Simplify unit: onsuccess/onfailure -> map
Simplify proxyto: Chain return
Add eval
Fix test_updateifempty: Future.updateifempty -> Promise.updateifempty
Simplify onsuccess: Promise.call -> self.respond
Simplify onfailure: Promise.call -> self.respond
Simplify ensure: Promise.call -> self.respond
Add transform
Simplify flatmap: Promise.call -> self.transform
Simplify rescue: Promise.call -> self.transform