Bad order of destruction
### Description

I expect destructors to be called in reverse creation order, inherited first then base - this is important for lots of reasons, ie all the way from multiple locks being released in the correct order to prevent deadlocks to pointers to the base class being valid during deconstruction  etc.

This order of destruction is already imposed for local variables, ie reverse declaration order - there's no reason objects shouldn't work the same...

```nim
type
  Aaaa {.inheritable.} = object
    vvvv: int
  Bbbb = object of Aaaa
    c: Cccc
    d: Dddd
  Cccc = object
  Dddd = object

  Holder = object
    member: ref Aaaa

proc `=destroy`(v: Cccc) =
  echo "destroying c"

proc `=destroy`(v: Dddd) =
  echo "destroying d"

proc `=destroy`(v: Aaaa) =
  echo "destroying a ", v.vvvv

func makeHolder(vvvv: int): ref Holder =
  (ref Holder)(member: (ref Bbbb)(vvvv: vvvv))

block:
  var v = makeHolder(1)
  var v2 = makeHolder(2)
```



### Nim Version

2.2

### Current Output

```text
destroying a 2
destroying c
destroying d
destroying a 1
destroying c
destroying d
```

### Expected Output

```text
destroying d
destroying c
destroying a 2
destroying d
destroying c
destroying a 1
```

### Known Workarounds

_No response_

### Additional Information

_No response_