oojs-update.sh: Replace target dir instead of adding file copies

* A command like "cp dist/* $TARGET_DIR" does not remove files
  that were deleted in the release dist. Using rsync instead.

  Though addition can happen, deletion should never happen as we
  refer to these files in Resources.php. But we also shouldn't
  leave behind old files mixed with new files, so delete them.
  Our structure unit tests for resources take care of catching
  references to files that don't (or no longer) exist.

* Use bash -n instead of != "".

* Refactor slightly to make it re-usable in other projects without
  too much modification (only REPO_DIR and TARGET_DIR need updating,
  the rest is generic now).

* The "git commit <dir>" doesn't properly take care of staging
  deletion of files removed by the update script, nor does it
  reliably (?) stage new files.
  Instead using a combination of "git add -u <dir>" (The -u
  stages deletion and modifcation of tracked files), and
  "git add <dir>" (stages modification and creation of files in
  that directory).

Change-Id: Ieb20978c887c5a141f31cab704b8d239f1572af0