Firmware sometimes returns erroneous timestamps

Added proper synchronization while handling lower 32 bit and upper 32 bit parts in ar5416GetTsf64().
Firmware sometimes returns erroneous timestamps(2)

Fixed incorrect wrapping handling in ath_extend_tsf().
FIX: support rstamps from the future too.

 * Extend a 32 bit TSF to nearest 64 bit TSF value.
 * When the adapter is a STATION, its local TSF is periodically modified by
 * the hardware to match the BSS TSF (as received in beacon packets), and
 * rstamp may appear to be from the future or from the past (with reference
 * to the current local TSF) because of jitter. This is mostly noticable in
 * highly congested channels. The code uses signed modulo arithmetic to
 * handle both past/future cases and signed-extension to avoid branches.
 * Test cases:
 * extend(0x0000001200000004, 0x00000006) == 0x0000001200000006
 * extend(0x0000001200000004, 0x00000002) == 0x0000001200000002
 * extend(0x0000001200000004, 0xfffffffe) == 0x00000011fffffffe  ! tsfhigh--
 * extend(0x00000012fffffffc, 0xfffffffe) == 0x00000012fffffffe
 * extend(0x00000012fffffffc, 0xfffffffa) == 0x00000012fffffffa
 * extend(0x00000012fffffffc, 0x00000002) == 0x0000001300000002  ! tsfhigh++
Fix: bug in extend_tsf near 0x8000000 values

Bugfix + added more test cases.
Merge pull request #67 from IanR778/timestamp_fix

Timestamp fix - looks good! Thanks!