Move irange to c10 (#46414)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/46414
For loops are often written with mismatched data types which causes silent type and sign coercion in the absence of integer conversion warnings. Getting around this in templated code requires convoluted patterns such as
```
for(auto i=decltype(var){0};i<var;i++)
```
with this diff we can instead write
```
for(const auto i = c10::irange(var))
```
Note that this loop is type-safe and const-safe.
The function introduced here (`c10::irange`) allows for type-safety and const-ness within for loops, which prevents the accidental truncation or modification of integers and other types, improving code safety.
Test Plan:
```
buck test //caffe2/c10:c10_test_0
```
Reviewed By: ngimel
Differential Revision: D24334732
fbshipit-source-id: fec5ebda3643ec5589f7ea3a8e7bbea4432ed771