[js] Add API for accessing metadata of a model's input/output (#23937)
### Description
Add API for accessing metadata of a model's input/output.
Currently, The implementation is only applied to web assembly backend
and nodejs binding. For webgl, there is so far no plan to implement this
API; for react-native, the implementation will be done later and is not
included in this PR.
#### Example usage:
```js
const mySession = await ort.InferenceSession.create( ... );
console.log(`there are ${mySession.inputMetadata.length} inputs:`);
for (let i = 0; i < mySession.inputMetadata.length; i++) {
let info;
if (mySession.inputMetadata[i].isTensor) {
info = `tensor: ${mySession.inputMetadata[i].type}, shape: ${mySession.inputMetadata[i].shape}`;
} else {
info = `non-tensor`;
}
console.log(`input ${i}: ${mySession.inputMetadata[i].name}: ${info}`);
}
```
possible output:
```
there are 1 inputs:
input 0: input: tensor: float32, shape: [batch, 3, 224, 224]
```
Resolves:
- #22682
- #22949