ENH: Optionally pass dtypes as a dict into json_normalize
#### Is your feature request related to a problem?

In some of my projects, the data I need to load as DataFrame comes in a json list.

We switched to `json_normalize` for its ease of use, but some memory/performance issues came as the default typing within this method outputs mostly `object`, `int64` and `float64` column dtypes for us - all of which are the most memory-demanding of their categories.

#### Describe the solution you'd like

Depends on #4464.
I envision passing `dtype` as a dict, so for a format like
```json
json  = [{
    "nest": {
            "int": 10,
            "float": 2.5,
            "str": "category_one"
    }
}]
```
Normalizing would look like
```python
dtype = {'nest.int': np.int8, 'nest.float': np.float32, 'next.str': 'category'}
df = pd.json_normalize(json, dtype=dtype)
```

Following the conclusion of #4464, the `dtype` arg would be passed to [the DataFrame constructor within `json_normalize`](https://github.com/pandas-dev/pandas/blob/983fae65fbadb83a064dfec53031d875d8e13928/pandas/io/json/_normalize.py#L338).

#### API breaking implications

As of now, [the code itself mentions a problem](https://github.com/pandas-dev/pandas/blob/983fae65fbadb83a064dfec53031d875d8e13928/pandas/io/json/_normalize.py#L343-L352) regarding metadata field typing.

I didn't dive in enough to determine how to deal with this. I see no breaking change coming from this feature, but if I understand correctly that will always override metadata field types with `object`.

If so the condition could be changed to
```python
if k in result and k not in dtype.keys(): 
``` 

#### Describe alternatives you've considered

I've made a separate module which runs `json_normalize` and then overrides the resulting DataFrame's dtypes dynamically through `as_type` and `apply`.
