Add Maybe template class
Forward argument to Variant::of correctly

The type parameter to the std::forward call in Variant::of was wrongly
decayed. It should be the exact type of the argument the of function
received for an l-value argument to be correctly forwarded.
Force contained types of Variant to be decayed

As required in the documentation comment for the Variant template type,
contained types of a variant must be decayed. This commit adds static
assertion so the compiler can check if they are actually decayed.