Only assert that at least 1 step is seen, as we're not guaranteed callbacks for all steps

The callback may not get added on the server until after the command has already started running, depending on network latency
Add test for when callback is added after command completes on server
Remove duplicate assert
Use CallbackWrapper instead of handle
Remove unused import.
Use guava.Files when calculating file checksum
Add missing Javadoc and remove unused field
Move version check to omero/__init__.py
Improve description of optional loaded parameter
Initialize VENV_URL variable (fix unbound variable error)
Install scc tools using pip rather than Homebrew
Change selection using mouse click. (see #10478)
Add doc and remove whitespaces.
When calling poll from the constructor, do it async

poll may call onFinished, which is virtual, and virtual function calls do not work from ctors
this makes callbacks that are added after the command finishes work
Improve mouse dragged and cursor display (see #10478)
Add doc.
Remove reset(), rename method and update comments
Add logic for defensive checksumAs* methods
Clean up session/exception handling in check()

session.getClosed() is an internal Ice method, and not related to sessions as I originally thought.

Ice.ObjectNotExistException is usually thrown, though a SessionTimeoutException is theoretically possible. ProcessI.check() in processor.py catches all exceptions which makes sense since if there is an exception we want to clean up (and if we didn't catch the exception it would trigger a cleanup anyway) so I've done the same here.
Use the same method for visible rectangle.