Make empty_tuple its own type.

empty_tuple used to be tuple<void, void>. There is no benefit to that. In fact,
this has caused me some (slightly) hard to detect errors. Having this as its
own type breaks nothing, and will be more resilient in the future.