Refactor for efficiency and concurrency

This changes a lot of stuff.  New approach just does a single
client.ftw() call, and then sends the unsent files afterwards, rather
than making a client.info() call for each file.
v1.0.0