sched: avr: implemented the AVR context switch

Implemented the context switching mechanism for the AVR architecture.
The sched::core calls cpu_reschedule, a function prototype implemented
specifically by each architecture. In the case of AVR, this function
disables interrupts, calls avr_switch_context and re-enables interrupts.

avr_switch_context is implemented in arch/avr/kernel/context.S. It
pushes all registers to the stack and saves the stack on the correct
(current) stack structure. Then, the new stack is loaded into the stack
registers and all registers are popped from the stack and the 'ret'
instruction will take the IP back to where it finished before this
thread was scheduled out.

timer: exec: fixed a small bug in the timer execution.

The `struct timer::tc_resume' was never being set correctly, which
prevent the timers to execute with the right time frames. Non-oneshot
timers also had a lock bug. Fixed by temporarily unlocking.

Signed-off-by: Michel Megens <dev@michelmegens.net>