just use c_void here

there's no actual reason to use a special type, since it's not
user-visible, and using one triggers rust/#5690 at the moment
move the high-level stuff to a separate module