Add a --readfrom option to specify the source device

Instead of always reading from the origin volume, let the user specify
which device to use for reading. This enables reading the differences
between two snapshots, allowing the origin to continue being actively
used while still getting a consistent image.