mango: revisit test database recreation logic

Databases used for integration testing are being recreated by
unbounded recursion which can blow up the stack in case of
unrecoverable errors.

Replace the tail recursion for a regular loop, set an upper limit
for the number of tries, and signal the problem with a more
descriptive message.  Introduce an increasing delay between the
subsequent tries for tolerance against transient errors.
diff --git a/src/mango/test/mango.py b/src/mango/test/mango.py
index 20a40d1..ad9747a 100644
--- a/src/mango/test/mango.py
+++ b/src/mango/test/mango.py
@@ -77,16 +77,22 @@
         r = self.sess.delete(self.url)
 
     def recreate(self):
-        r = self.sess.get(self.url)
-        if r.status_code == 200:
-            db_info = r.json()
-            docs = db_info["doc_count"] + db_info["doc_del_count"]
-            if docs == 0:
-                # db never used - create unnecessary
-                return
-            self.delete()
-        self.create()
-        self.recreate()
+        NUM_TRIES = 10
+
+        for k in range(NUM_TRIES):
+            r = self.sess.get(self.url)
+            if r.status_code == 200:
+                db_info = r.json()
+                docs = db_info["doc_count"] + db_info["doc_del_count"]
+                if docs == 0:
+                    # db exists and it is empty -- exit condition is met
+                    return
+                self.delete()
+            self.create()
+            time.sleep(k * 0.1)
+        raise Exception(
+            "Failed to recreate the database after {} tries".format(NUM_TRIES)
+        )
 
     def save_doc(self, doc):
         self.save_docs([doc])