core:mutex: allow idle thread to use mutexes

`mutex_t::val` in an integral value where 0 means unlocked, and any other value means locked.
`mutex_trylock` writes the current thread id into this member to denote that it is locked.
The problem is that the idle thread as the PID 0, and is therefore not able to sanely use this function.
The reason why the idle thread might need to use mutexes is because it changes the low-power state of the board, and I see reasons why it might be useful to use a mutex in this circumstance.