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
Simplify handle: Promise.call -> self.rescue
Simplify map: Promise.call -> self.flatmap
Simplify filter: Promise.call -> self.flatmap
Simplify or_: Promise.call -> Promise.select
respond: Don't Promise.call + die on uncaught exceptions
Add message to asserts
Only construct a new Exception type if it's not already an instance of MiraiError or ShadowException
Big Cleanup

- pipe all user-defined-function calls through Promise.eval in order to wrap any calls in SafeFunction
- log an error if a call to Promise.respond throws an exception
- informative assert messages
- some extra API documentation about failure modes
- inline comments about some of Promise's more complex methods
- Promise.eval return Future instances
- tests for more failure modes where functions return non-Future values or raise exceptions
- augmented all potentially wait-forever tests with timeouts