Quiet warning if Makefile.PL is run with -w and no --localedir

Usually it isn't, but its nice if it can be run with warnings on.

Signed-off-by: Michael G Schwern <schwern@pobox.com>
Don't lose Error.pm if $@ gets clobbered.

In older Perls, sometimes $@ can become unset between the eval and
checking $@.  Its safer to check the eval directly.

Signed-off-by: Michael G Schwern <schwern@pobox.com>
The Makefile.PL will now find .pm files itself.

It is no longer necessary to manually add new .pm files to the
Makefile.PL.  This makes it easier to add modules.

It is still necessary to add them to the Makefile, but that extra work
should be removed at a future date.

Signed-off-by: Michael G Schwern <schwern@pobox.com>
Extract git Git::SVN class into its own file.

Makes it easier to work with.

This is just a straight copy, no code has been changed.  The fixes will come in
the next commit.  This will make it easier to see what code was changed.
Fix Git::SVN so it can at least compile alone.

It's still very intertwined with git-svn, but that's a lot of work.  This
gets things working and tests passing again (as well as they were).

This required some parallel refactorings...

* fatal() moved out of git-svn into a new Git::SVN::Utils

* The $can_compress lexical moved into Git::SVN::Utils::can_compress()

* The $_prefix variable which stores the --prefix option is wrapped
  in a function (rather than made global) so access to it can be
  controlled.  Git::SVN does not rely on this function being
  available so it can work without git-svn loaded.  In general,
  the options should be put back together into a hash and accessed
  via an options() function.

* A new tree of unit tests for the Git::SVN modules has been created.
  It doesn't work with the existing Makefile, that can be worried
  about later.

* Move initialization of Git::SVN globals into Git::SVN

* Have Git::SVN load the Git command* functions on its own
Extract Git::SVN::Log from git-svn.

This is a straight cut & paste.  Next commit will make it work.  This will
make it easier to see the differences in Git::SVN::Log.
Make Git::SVN::Log work.

Changes to Git::SVN::Log to make it compile....
* Change the $_git_format lexical only used by Git::SVN::Log into a Git::SVN::Log global
* Have it load the Git command functions itself
Move Git::SVN::Migration into its own file.

Just a straight cut & paste, the fixes come next commit.
Fix Git::SVN::Migration after its move.

Also...
* eliminate the big "import all the Git command functions" loop, nothing needs it
  any more
* only load Git::SVN::Migration if we need it
Cut & paste Git::IndexInfo into its own file.

No other changes, those are next commit so they can be seen in the diff.
Fix Git::IndexInfo so it compiles.

Only used by Git::SVN::Fetcher.
Cut & paste Git::SVN::GlobSpec into its own file.

Fixes to make it work come next commit.
Fix Git::SVN::GlobSpec so it works.

Only used in one place in Git::SVN, load it on demand.

That should be all the Git classes out of git-svn.
Change git-svn's main canonicalization routines to use the SVN API.

SVN 1.6 and 1.7 have different APIs, so check what's available.

For #1
Don't modify the path if Git::SVN has no path set.

Otherwise "foo" becomes "/foo".  Previously the custom canonicalization
seemed to have special code to deal with this gaffe, but that's gone.
Make Git::SVN::Ra->get_dir work with the new canonicalization.

SVN::Ra->get_dir has some special requirements that the SVN canonicalization doesn't
handle.  It doesn't like "foo/.." and it doesn't like a bare ".".

I don't know yet how widespread this problem is, so it's restrained to get_dir()
for now.
Remove an unused lexical.
Replace the hand rolled escape functions in git-svn with the canonicalization functions.
Make Git::SVN use accessors internally for path.

This is so it can canonicalize it both on initialization and if the path
is set.

I've also identified locations of ad-hoc canonicalization for later removal.

For #3
Change the rest of the code to use Git::SVN->path instead of the hash directly.

For #3