New Handle manager

This implements a new Handle manager, adds ref-counting to kernel objects and implements `DuplicateHandle`. Note that support for `DuplicateHandle` is still fragile, because the rest of the kernel doesn't expects object to be able to have multiple handles pointing to them. Regardless, it seems to work OK on what I tested so far. I plan to fix this next, but decided it would be good to submit PRs more often to reduce rebase pain and reduce review sizes.
0x8000 is the overflow point for the 15-bit generation part of the handle. I'd just keep it like this personally, but I could replace it with (1 << 15) or something.