[QNN-EP] Enable Optrace from QNN into QNN EP (#25987)
### Description
- Add optrace profiling level
- Add profiling to compose graph
- Add new qnn system profile serializer class
- Add API versioning safeguards
- Use current behavior for QNN API < 2.29
- Use QNN System Profile API for QNN API >= 2.29
- Check for log file at end of profiling unit test
- Ensure system libs are loaded when profiling is enabled
### Motivation and Context
Adds optrace level profiling for debugging purposes. Utilizes new QNN
System Profile API to generate a binary log file compatible with
qnn-profile-viewer executable for all profiling levels when QNN API is
>= 2.29 (i.e. QAIRT 2.39 or later).
Current behavior will still persist regardless of QNN API version (i.e.
a .csv file will still be generated).
The binary log file naming will be based on the existing
profiling_file_path EP option. The value of profiling_file_path is
expected to be .csv as before, and the binary log name will remove
".csv" and append "_qnn.log". For example, if profiling_file_path is set
to "foo.csv", then both "foo.csv" and "foo_qnn.log" will be generated.
With optrace enablement, qnn-profile-viewer can then be used to generate
and view chrometraces with a user-friendly UI.
For more details, see:
https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50/htp_backend.html#qnn-htp-optrace-profiling
https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50/htp_backend.html#qnn-htp-analysis-summary-qhas-
---------
Co-authored-by: Calvin Nguyen <calvnguy@qti.qualcomm.com>