Improve is_expression trait.

This used to use _is_convertible and an empty base class. However, this is
not a good idea if we actually instantite the objects, since empty base class
optimization is only possible if there is a *unique* subobject of empty type.

Instead just use a magic marker type member.
Start a generic vector class