thread, exception: minor cleanups

Removes the last FIXME from exception.c by demoting interrupt preemption to a
TODO. Rather, return_from_exn() should be rewritten to reschedule the
preemptor immediately, terminating int_latent()'s return value then and there.

int_latent() was also simplified somewhat, and <ukernel/thread.h>'s TODOs and
FIXMEs were considered.
test: string: add checks for received strings' pointers

Both in the simple and compound case.

For some reason, L4_Substring is indexed from one. And there's no assert
against passing zero. (there should be.)
test: ipc: check for returned address in Map/Grant items

One variable was left TODO. There might be others, such as the case where
either RcvWindow is smaller than SndFpage, or SndFpage is mapped at an address
that causes RcvWindow to run out before the map.
ipc: return effective map/grant address in do_mapgrant_transfer()
ipc: rewrite string addresses according to receive buffers

This allows for fast redirection.

In detail:

  - adds a loop to next_src_string() that computes the substring addresses on
    the receiver's side.
  - inverts the calling sequence between the initial next_src_string() and
    next_dst_strbuf(). now the latter is called first because the former makes
    a copy of its iterator in order to do the above.