Change date logic to support dates pre-1970

Git previously used the 'unsigned long' type to pass around values that were
really 'time_t'. Instead, a new type 'git_time_t' has been introduced which
will allow the type that epoch times are passed in to be easily changed in the
future. Additionally, this new type has been defined to be a 'long' instead of
an 'unsigned long'.

In addition to changing the sign of the time type, new logic has been
introduced to support negative value epoch times.