Add documentation

Refactor and redesign polymorphic<T> interface to be flexible, while
mirroring the std::unique_ptr interface as closely as possible (still a
bit of a work in progress due to the use of a copier function)

Update Readme *slightly*, there are some more changes regarding the
information for it coming soon. All the 'small differences' will be
moved into the documentation.

Fixes for core::optional<T> are incoming, as well as finalized
documentation.