Fix standard-violating behaviour in queue.c

In C it's undefined behaviour to try to create a NULL pointer via
pointer arithmetic, so the implementation of xQueueGiveMutexRecursive
has a bug. Decrementing 'pxMutex->uxRecursiveCallCount', strictly
speaking, can never result in a 0 as far as the standard is concerned.

Some compilers (clang, for example) will notice that the followng
test:

    if( pxMutex->uxRecursiveCallCount == 0 )

is always false as a result, and will optimize out that entire block,
leaving the call to 'xQueueGenericSend' out of the compiled code
entirely. Deadlocks and unexpected behaviour result.

This patch fixes both 'xQueueGiveMutexRecursive' and
'xQueueTakeMutexRecursive' to do these arithmetic operations on
integers, and then cast to assign the values back to the pointer
type they're stored in.