Added sparse checkout functionality.

Created two new functions: SparseCheckoutNewRepo and AddToSparseCheckout.
SparseCheckoutNewRepo will clone the repo and keep only the file given by the
tag #snippet. Sparse checkout will only take the file from the given branch.
The md5 hash has been updated to include the branch name so that each branch
from the same repo will have its own folder.

AddToSparseCheckout will add files to the sparse checkout if the git repo/branch
combination already exists. It will update the tree with `git read-tree -mu HEAD`
whenever the file is edited.

Change-Id: I3cb8ef0f7aa38e8620e2d5580d2810ac6af661c8