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.
The current revision of this branch now defines this well enough, thanks :)