BUG: fix nested dict replace
closes #6342

see u r hacking the biggest hack in internals, putmask
because of the dtype changes that are possible
 yes this is definitely a hack. `np.putmask` will cycle values after a false is found if the size of the array and replacement values are not equal but it will only use the next value in the replacements if the `True`s are contiguous ... highly counterintuitive behavior for that if u ask me ... is there a more optimal way that i'm overlooking?
 internals is kind of fun .... always have to clear out my weekend when a bug involves internals.py :smile: 
 fyi `copyto` raises in the case that the sizes are unequal, but only available in numpy >= 1.7
 I avoided `copyto` for that reason

yeh...`putmask` has a lot of 'special' cases....which I think really are just weird things numpy does
 `replace` is turning into a god function ... worth opening an issue?
 what do you mean?
 It's just really, really large ...
 hahah so true!

next project...you can effectively replace `update` with replace!
 @jreback What do u think about this? I'll run a vbench to make sure this doesn't cause a hit.
 sure....looks fine otherwise.....not even sure how often that path is actually hit (can you put a case that hits it up?)
 Nested dicts hit it if they contain keys that aren't in the frame/series

``` python
df = DataFrame({'col': range(1, 5)})
df.replace({'col': {-1: 'a', 1: 'b', 2: 'c'}})
```
 ok...then prob ok....not hit a lot...but do a perf check anyhow
 Perf looks good:

```
packers_write_pack                           |   0.9952 |   0.9129 |   1.0901 |
stats_rank_average                           |  23.8746 |  21.2846 |   1.1217 |
timeseries_asof                              |   7.9971 |   7.0529 |   1.1339 |
join_dataframe_index_single_key_small        |   6.4060 |   5.5654 |   1.1510 |
timeseries_asof_nan                          |   8.0025 |   6.8281 |   1.1720 |
-------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
-------------------------------------------------------------------------------
```
 Random network failure unrelated to this

https://travis-ci.org/cpcloud/pandas/jobs/18993144

merging
