Added git_stash_apply() and git_stash_pop() APIs

This is a tentative implementation of git_stash_apply() based on the actual Git implementation found at https://github.com/git/git/blob/master/git-stash.sh#L440.

Once you have git_stash_apply(), it's trivial to implement git_stash_pop() so I also added it.
> I'm not following you: unstashed_tree is the reinstantiated index if requested, it's not the workdir tree.

You just checked it out - so it is the tree that was placed into the workdir.  (And if you opted not to use it, then you can just use the index, instead.)

The idea here is that instead of adding one file at a time to the working directory, we can take what's in the index, add this additional data, and write that.  `checkout_tree` is smart enough to only write the difference, but also should do the conflict detection that you've done yourself.

I don't anticipate edge cases - but if there are bugs, then it would be nice to isolate those bugs to only having one place we check out files and do conflict detection and the like.

Here's some sample code of what I'm suggesting.  Though this just reloads the index, always, instead of taking the index tree or the unstashed tree that you previously created:

	git_index *index;
	git_repository_index(&index, repo);

	git_oid current;
	git_index_write_tree(&current, index);

	git_tree *current_tree;
	git_tree_lookup(&current_tree, repo, &current);

	git_index *merged_index;
	git_merge_trees(&merged_index, repo, NULL, untracked_tree, current_tree, NULL);

	git_oid merged_tree_id;
	git_index_write_tree_to(&merged_tree_id, merged_index, repo);

	git_tree *merged_tree;
	git_tree_lookup(&merged_tree, repo, &merged_tree_id);

	options.checkout_strategy = GIT_CHECKOUT_SAFE | GIT_CHECKOUT_DONT_UPDATE_INDEX;

	return git_checkout_index(repo, merged_index, &options);