Some extensions to puppet-sync

Hi! Thanks for your puppet-sync script. I added some extensions to it which reflect how we use puppet at work.  Although you could use this PR and merge it as it is, it's more for you to review and see what may be useful for you. Feel free to re-use / rewrite those that make sense to you or to contact me if you need further feedback.

- System locks for avoiding race conditions
- Mapping of branches to local environments (overridding the
  CLI argument)
- full-sync CLI argument (-fs) to force a synchronize between
  the local environments and remote branches, including removal
  of non-existing ones
- forbid deleting of the local "production" branch.
- chmod of top-level directory when doing a git clone
- set up a default umask for files that are created outside of git 
  (e.g., locks)

Cheers.
how exactly does this create a `Set`?