Add optional wait_on to wait for future in get/set

This makes it much easier to write wait dependencies, for example:

    future = None

    for device in orderered_devices:
        future = device.set_position(value, wait_on=future)

I also took the liberty to add long missing docstrings for those methods.