Shared_ref Cleanup

- Fix copy ctor
- Do not use runtime exception (costly) but static noexcept instead
- Forward argument instead of copying
- simplify/factor assignment using swap and value argument instead of lvalue ref