moved SyncQueue and SyncOperation into their own top-level classes to ease maintainability and testing6 removed some dead code