pool: switch to next available provider on error

  also implement a few more error listeners