Warn on implicit range downsizing
### Description

`range` is a type that currently is [best avoided due](https://status-im.github.io/nim-style-guide/language.range.html) to the large number of bugs, semantic gaps and inconsistencies it has with respect to the rest of the language. 

Removing it is hard, but we can at least start plugging some of the gaps with warnings, starting with the most obvious one, where "non-overlapping" range conversion implicitly triggers runtime panics, a significant footgun compared to other similar conversions that have to be made explicit (ie assigning an int to an int8):

```nim
type FakeUint8 = range[0..255]
type OffByOneRange = range[1..256]
var v: FakeUint8
var x = 256
var y = OffByOneRange(256)

v = x # panics, should trigger warning
v = FakeUint8(x) # panics, should not trigger warning
v = y # panics should trigger warning

proc xxx(v: FakeUint8)= discard

xxx(x) # panics, should trigger warning
xxx(FakeUint8(x)) # panics, should not trigger warning
```

The above strategy would model `range` in line with other "integer size" conversions where converting to a "bigger" range is allowed implicitly while converting to a smaller range requires explicit action.

In this world, an `int` is obviously a special case of `range[int.low..int.high]`, `int16` is naturally a `range[int16.low..int16.high]` and so on, which would help guide a sound strategy for all integer sizes, now and in the future..



### Nim Version

2.2

### Current Output

```text

```

### Expected Output

```text

```

### Known Workarounds

_No response_

### Additional Information

_No response_