Type lowering and map[string]ArbitraryType

Identifier resolution is a pain in the butt.

In any case, the following is now supported
```go
type MyInt int
type Thing struct {
    Which map[string]MyInt `msg:"which_counts"`
}
```

At the moment we <b>only do lowering for "base" built-ins</b> (`int`, `float64`, `string`, and, as a special case, `[]byte`. Maps and slices are unsupported.) Custom composite types (like `type MyFloats []float64`) are not yet supported.

Also, there's a bug fix for reading pointers ahead.