A Vector that doesn't require an initial reserve() (eg: with a
default, or small enough capacity) can have a constant initializer.
This changes the code in a few places to make that possible:
- mark a few other functions as constexpr
- do without any reinterpret_cast
- allow to skip reserve from init