Fixed bug and kernel-level stuff (see description)
- Created a non-blocking version of request_memory_block() and receive_message() for i-processes
- Fixed up release_memory_block() including when an i-process calls it
- Fixed bug in the timer_i_process() by using kernel-level functions and checking if there are any delayed messages before trying to access them