Support both puppet forge and directory synchronization

Update the puppet importer to support synchronization with a directory containing a PULP_MANIFEST and puppet modules (tarballs).  Currently, the importer unconditionally delegates the synchronization to an object that is puppet forge aware.  In the PR, a 2nd object is added to synchronize with a directory.  The importer has been updated to select the object to which it delegates the work based on the feed URL.

More specifically:
- Add a function object to implement the (new) directory synchronization.
- Update the importer to conditionally delegate the synchronization based on the feed URL.
- Rename the existing *runner* to be clearer about what it provides.  Also, converted it to a function object since it was named a *runner* which only had perform() and cancel() methods.  Seemed cleaner and matched the new delegate.

Lastly, I added a Timer class for reporting elapsed time.  This probably should go into the platform server common but decided to just leave it here for now.  We can do a follow up PR to move it if the team agrees.