Use std::aligned_storage in variant, also optimize variant's size, remove alignment