[new] use promising `Either` as results

the asynchrounous API returns a
`Promise[Either[(Int, Option[ErrorResult]), T]]` for each method that
makes a request to the database instance. this makes is possible to
really deal with exceptions. This also avoids to produce meaningless
stack traces due to the callbacks