tower-freertos: switch to an efficient implementation for channels

* we now use a critical section rather than RTOS primitives to lock
  reading/writing to ring buffer from either
* these critical sections should be very short, and they are the only
  way to safely implement guards for data contested by both other
  tasks and ISRs.
* ISSUE: channels with a size parameter of 1 do not work! Because we
  can only implement the ring buffer in terms of Ivory Ix/Array, a
  channel with size 2 contains between 0 and 1 events. One day (in ghc 7.8)
  when we can do math (compute the successor) on type naturals we will
  be able to fix this bug. For now, we can only warn you with prelude.error
tower statemachine: up channel size to 2 to deal with new freertos implementation