a better proposal for mapping C enums
currently C enums map to int or distinct int; this is not good (type safety, and `$` prints as int which is really not good)

instead, this is better:

```nim
type THttpMethod* = enum
  HTTP_DELETE = 0, HTTP_GET, HTTP_HEAD, HTTP_POST, HTTP_PUT, HTTP_CONNECT,
  HTTP_OPTIONS, HTTP_TRACE, HTTP_COPY, HTTP_LOCK, HTTP_MKCOL, HTTP_MOVE,
```

it avoids implicit int operations, and makes `$` work the way it should, ie:

`doAssert $HTTP_DELETE == "HTTP_DELETE"` instead of `"0"`


## [EDIT] out of order entries
nimterop will have to reorder out of order entries as this isn't valid nim:
```nim
type Goo* = enum
  goo1 = 2,
  goo2 = 1,
```

## [EDIT] repeats
as mentioned by @zestyr we need to take care of repeats (eg https://github.com/ImageMagick/ImageMagick/blob/master/MagickCore/exception.h)

nimterop can handle it automatically:

```nim
type ExceptionType {.pure.} = enum
  UndefinedException = 0
  WarningException = 300,
  # ResourceLimitWarning = 300,
  TypeWarning = 305,
const ResourceLimitWarning = ExceptionType.WarningException
```
(see related discussion here https://gitter.im/nimgen/Lobby?at=5c52119d1b62f1265076b349)


- [ ] TODO: check it'd do the right thing when calling an imported proc, eg:
`myfun(myEnumValue)` in nim should be same as `myfun(myEnumValue)` in C

- [ ] TODO: 
Track {.hint[ConvFromXtoItselfNotNeeded]: off.} as well here in case we can resolve it as part of an improved enum.



## test cases
* eg: $git_clone_D/temp/soloud/demos/common/imgui/imgui.h


## design questions
* pure enum or not pure enum? 
note: this still isn't the same thing, see [nonpure enum can hijack pure enum; instead should give `Error: ambiguous identifier` ; pure and nonpure should both mean the same thing; pure should be deprecated · Issue #8850 · nim-lang/Nim](https://github.com/nim-lang/Nim/issues/8850)
I'd prefer pure enum


## scratch below here
see this part of nim docs:
```
Importcpp for enums
~~~~~~~~~~~~~~~~~~~

When ``importcpp`` is applied to an enum type the numerical enum values are
annotated with the C++ enum type, like in this example: ``((TheCppEnum)(3))``.
(This turned out to be the simplest way to implement it.)
```
* see: https://nimble.directory/docs/expat//expat.html
* see [ImportC pragma for enum members · Issue #5676 · nim-lang/Nim](https://github.com/nim-lang/Nim/issues/5676)
* see [couven92/nim-importc-helpers: Nimble package for supporting and simplifying import of symbols from C into Nim](https://github.com/couven92/nim-importc-helpers)