Ambiguous call on resolveable overloads
### Nim Version

2.0, devel


### Description

```nim
type
  A {.inheritable.} = object
  B = object of A
  C = object of B

proc add(v: B, v2: A) =
  discard

proc add(v: A, v2: A) =
  discard

var x: C
var y: B

add(x, y)
```

In the above hierarchy, the `v: B` overload is clearly better (since the other arguments are all equal to start with) - [C++](https://godbolt.org/z/MdfManbE9) can do the right thing here - seems like nim should also be able to do so.



### Current Output

```text
testit.nim(15, 4) Error: ambiguous call; both testit.add(v: B, v2: A) [proc declared in testit.nim(6, 6)] and testit.add(v: A, v2: A) [proc declared in testit.nim(9, 6)] match for: (C, B)
```

### Expected Output

```text
compiles
```

### Known Workarounds

_No response_

### Additional Information

_No response_