More steps to being completed, now copying backups to staging then destination

Abstract out an interface so that we can mock out the actual backing up.
Now backs up to staging, then to destination. If the destination copy
goes wrong, we deal with it next time.
On the next launch, we attempt to copy it again. If it still doesn't
work, it stays on the queue for next time.
Error logging going on now too! Although the actual implementation
doesn't log anything yet, the code is there.
Bug fixes with unique filename and staging copying
Fixed bug with the getter in UniqueFilename, it kept returning the current date time.

Added retry policy code, but it isn't used yet.