Useful comments
Fixes in fire_single_reaction() and make_new_domain()

In particular product particles are not required to end up in the bulk,
but also may go to the parent structure.

Also we replace a couple of hard-coded asserts by warnings.

Most important change: If update_single() fails we make a Multi.

This pertains to the situation in which a particle exits close to a
zero-DiskSingle. In that case the DiskSingle shell is wrapped by a
fake shell of the size of the corresponding Multi shell, but if the
single that is to be updated is smaller it will not burst the cylindrical
DiskSingle domain. Then update_single() will fail and we need a fallback.

This is certainly not the most elegant solution, but it works for now.
On the long term we should revise make_new_domain(), fire_single_reaction(),
etc. completely.
New exception 'ShellUpdateError' to be able to catch it specifically
Only add new single to the scheduler after all checks have been made