Use decayed type as an option's value type.

Also adds the optional_bits struct, an empty type just used to hold
templated types, and the optional<T> type alias, which uses the decayed
type of T. This fixes an error where you could end up trying to create
an optional<char const *&> which was really weird and failed miserably.

So, now, it's preferable to use optional<T> as the type instead of
option_t<T>. some<T>(...) now uses it as well.

def<T, ...>(...) has been renamed to make_option because that's a lot
clearer. some(...) is just a forwarding wrapper around it.
Define S_EXPORT/S_HIDDEN for Windows.

Just uses dllimport/export where applicable, since Windows is the only
damn thing that seems to require this.