Added support for lazy loading of objects.

Lazy loading will allow a git-list method to list all the oid and
string and wrap them in objects.  Instead of returning the strings
directly.  The pointers to the actual objects will not be resolved
until a function is called that needs them.

Git-name for references has been optimised to support reading the name
directly from the lisp object to avoid doing an object lookup.  This
combined with remote-p or branch-p allows lisp side filtering without
needing to resolve the actual objects.

With a small amount of extra work git-list can be modified to return
actual objects so to achieve the same functionality as the current
git-list
(mapcar #'git-name (git-list :references repository))
will need to be used.