use preprocessor to map define'd C macros
follow up for https://github.com/genotrance/nimterop/issues/11:
`constants` works but not C `macros`, see test case in https://github.com/genotrance/nimterop/pull/30

## [EDIT] examples
```
#define foobar1 30 # case1: litteral: already handled
#define foobar2 3.1415 / 2 # case2: symbol free expression
#define foobar3(x) x*x + 1 # case3: refers to just parameters symbol `x`
#define foobar4(x) a * x # case4: refers to external symbol `a` ; harder; could be impossible to map depending on what `a` is

note: C allows pretty much anything in macros, these are legal but shouldn't be mapped:
```c
#define foo whatever_that_does_not_exist
#define COMMA  ,
#define EXTERNC  extern "C"
#define BEGIN {
```

## behavior: same as C macros
nim templates seem the most appropriate mapping from C macros, and have same semantics (code substitution) with regard to duplicate evaluation as C macros, which we may wanna preserve during mapping eg:
```
#define foo(x) x*x
```

```nim
var counter = 0
proc identity[T](x: T): T =
  counter.inc
  x

static: doAssert foo(identity(3)) == 3*3
doAssert counter == 2
```


## proposal
for simplicity we can:
* case1: automatically map litterals (integral, float, string) (already do except for string see https://github.com/genotrance/nimterop/issues/75#issuecomment-458025480)
* case2, case3: automatically map macros that only refer to params

* case3: disable mapping these by default
  * but call user defined plugin `onUmapped(symbol)` (with a enum field called `reason`)
  * allow user to specify which ones to map and using direct source translation, and use a template for these
  * user can always provide full definition with another mean
