Remove final inheritance from bad_expected_type as it prevents the use of a nested exception

Cleanup some of the core::expected<T>'s internals
Add several tests for core::expected<T>'s constructors.