Moved `Cons` base structs into `detail` namespace
* they present implementation details which should be invisible to the library user
* added type equality assertion to `ConsWithCdr` to enforce equal types throughout each `Cons` structure
** we are not aiming for a `std::tuple` replacement after all