Update pack to work with movable-only types
Update partial to use pack
Update and_ metafunction to use is_same trick