Remove Socket token generic in favor of a struct

Token has become a tuple struct wrapping a single uint. Using a generic
is not much use because supporting epoll and kqueue require that:

a) implement Copy
b) fit in the same number of bytes as uint

Given these requirements, it seems easier to just use a uint based
token.

Note that the TOKEN_{N} hack is to work around a rust bug (rust-lang/rust#17722) that has been fixed in a PR but is waiting to be pulled in.