Rewrite uaccess functions to incorporate proper exception fixups

* The fixup mechanism allows recovery from kernel-mode page faults when
  accessing userspace memory, which prevents a misbehaving user process
  from inducing a kernel panic through supplying an invalid pointer.
* Perform elementary bounds checking in access_ok().
* Use generic strncpy_from_user(), strlen_user(), and strnlen_user()
  functions.  Implement the word-at-a-time interface with little-endian
  optimization; big-endian configurations defer to asm-generic.