Fix several bugs:
- https://llvm.org/PR60258 The conversion constructors' constraint __compatible_with incorrectly allow array types conversion to scalar types
- https://llvm.org/PR53368 The constructor that takes unique_ptr are not suffiently constrained.
- The constructors that take raw pointers incorretly use __compatible_with. They have different constraints