[ROCm] Fix GPU handle pool singleton aliasing using opaque handle type separation
Problem:
- hipBLAS, hipSOLVER, and other GPU libraries were unintentionally sharing the same singleton instance of `HandlePool`
- This occurred because all pools used the same template type signature (e.g. `HandlePool<hipblasHandle_t, Stream>`), leading to a single static instantiation
- As a result, using FFI to call hipSOLVER followed by hipBLAS could lead to overlapping internal state
- This caused potential memory corruption and unpredictable behavior, especially in mixed or concurrent workloads