Loosen restriction on fold function return types.

It is enough that the fold function returns something that is
convertible to the correct type.
Fix noexcept-specification in maybe's foldr implementation.

Arguments to the fold function were given in reverse order, likely a
copy-paste error from foldl.
Add `to_list` function applicable to any foldable instance.

Essentially equivalent of `foldr(cons, list<T>{}, foldable)`.