Add comparisons for smart pointers
Add weak pointer and tests for it