Invalidate the timer before nil-ing out the target

Add an additional check before the objc_msgSend for extra
crash-resistance.
Also turn target into a property
Allow the target to be held weakly

This is a common request for NSTimer to support, and there are in fact
several libraries that provide timers that hold the target weakly. This
can be particularly useful if the target is a UIView or a
UIViewController, so that if the view or view controller is dismissed,
it will be deallocated immediately (and the timer will effectively never
fire).

However, since this behaviour is not always desired, this commit makes
it optional. The current initializers keep the target strongly held in
order to maintain backwards compatibility, but they are deprecated in
favour of initializers that specify explicitly whether target should be
strongly or weakly held.

Note that the timer is not automatically invalidated if its target is
deallocated. In a situation where the target holds a reference to the
timer and the timer holds a weak reference to the target, the target
should manually invalidate the timer in its dealloc method.
Merge pull request #1 from sadlerjw/weak-target

Allow the timer's target to be held weakly