Avoid realpath where it is not necessary

Symlinks in opt and LinkedKegs point directly at a keg in the cellar, so
only resolving once symlink should suffice, and make it clear what path
we are interested in.
Use File.symlink to link kegs

Before:

$ git rev-parse HEAD
f6cd59c448b914c14b5f41c536428d3c3c8da12c
$ time brew link git
Linking /usr/local/Cellar/git/1.9.1... 204 symlinks created

real    0m0.929s
user    0m0.441s
sys     0m0.365s

After:
$ time brew link git
Linking /usr/local/Cellar/git/1.9.1... 204 symlinks created

real    0m0.237s
user    0m0.190s
sys     0m0.045s
Rescue specific exceptions instead of guessing what happened
Move make_relative_symlink error handling into keg and adjust callers
Raise useful errors from make_relative_symlink
Only unlink after a LinkError
Raise AlreadyLinkedError when a keg is already linked
Adjust link command for updated error handling
Adjust installer for updated link error handling
Use resolved_path instead of dirname and readlink directly
Pass the link mode to resolve_any_conflicts