[dm-thin] Introduce an atomic_t to keep track of pending preparations for a new block.

Previously we used separate bools to track quiescing and copying
actions.  By making this we'll be able to support blocks that need a
partial copy and partial zero.
[dm-thin] Track the size of any external origin.
[dm-thin] Now supports external origins with different size to the snapshot.

Previously the external origin had to be a multiple of the block size
in size.  And we didn't support snapshots that were larger than the
origin.