In order to prevent a thread from closing a backend
while another thread is getting a connection (which
can result in an engine being created) stop this kind
of concurrent mutation by creating a engine (if it
was not user provided) in the constructor.
In the close the engine dispose is called (which will
according to the docs just create a new pool anyway)
so there is no need to recreate the full engine object
from its same configuration again.
Change-Id: Id1fa3001b3ebbe76bbcdb08ed4add6a9e16ea96b