Move definition of struct nil_ into its own header

This is to work around a problem in `list/detail/empty_impl.hpp`, where the nvcc compiler was complaining about `nil_` being incomplete.