Simplify control flow in make_retrostep()

Method make_retrostep() of Chemical class was returning a set of reaction
SMILES or None, if applying transform resulted in empty product list. I rewrite
it to make it return just an empty set in case of failure. It allowed to
simplify a bit of control flow and should have no unwanted side-effects..
Optimze checking if a reaction is in the database

Previously, to check if an incoming reaction is published (i.e. is in the
database) a separate query (is_published() function) had to be executed. To
make the matter worse, the query was using unindexed field ('smiles') making
those query very time consuming. I removed this in efficient function and
changed the logic behind the search.

Now, the known reactions are added to the pool of all reactions, and
appropriately marked, on the fly while processing a chemical by utilizing
indexed reaction ids stored in the document database describing a chemical
('reaction' field).
Address empty product lists

In some cases, RDKit's RunReactants() returns a list of possible product sets
containing empty entries. Obviously, such cases were causing subsequent
conversion to SMILES to fail miserably. I added a safety trigger allowing to
filter out such cases.