Remove unnecessary variant_storage type.
Fix variant value constructor to work correctly

Fix variant.get<N> not working correctly.

Add several SFINAE cancellations to constructors and assignment
operators.

Add test for variant::variant(T&&)
Add test for variant::operator = (T&&)
Clean up internals for variant constructor delegation
Add test for std::hash<variant<Ts...>> specialization
Add test for variant::operator = (variant const&)
Add test for variant::operator = (variant&&)
Add test for variant::visit