Timer 1 Initialize - Complete

I have added everything needed to setup Timer 1. It accepts a clock
prescaler argument as well as a function pointer to be used by the
timers interrupt when it occurs.

It also checks the function pointer to see if it is or if it is a null
pointer.
Timer 2 Initialize - Complete

Similar to the first one
Timer 4 Initialize - Complete

Timer 4 does not exist on this chip, a fact that I was not aware of
until I was well into writing the functionality in. By default it will
just return a 0 indicating that the initialization failed.

I also did wrote the meta-documentation for timers 1, 2, and 3.
Null pointers are valid arguments

After some debate I decided to allow a null pointer to be sent which
allows a timer to be initialized which is not intended to have a
function called during the interrupt. Eg. when using it for timing (main
loop wheel spinning) or as part of another module (PWM).
Timer 3 Initialize: Part 1 - Complete

Setting the timer up as a regular timer is complete. The task of setting
it up as a gated timer is still left undone.
Timer 3 Initialize: Part 2 - Complete

The timer can be setup as a gated timer now.

I need to setup the timers to enable the associated interrupts now.
Enabled interrupts

Interrupts are now turned on if a valid function pointer (Not a null
pointer) is sent as an argument.
The function pointer is also not set if the pointer is a null pointer.
Created sentinels

These functions now immediately return 0 if they detect a problem, this
is done before  changing anything
Added PRx registers to initialization

They are set to their individual maximums, but nothing else. I want to
have them autoset, along with the pre/post scalers so I don't want to
waste effort on them.
Created a null function pointer definition for the timers
Merge pull request #1 from CraigComberbach/Timers

Timers