ENH: Optimize take_*; improve non-NA fill_value support

Optimizes/improves `common.take_1d`, `common.take_2d`, `common.take_2d_multi`, and `common.take_fast` in the following ways:
* For common cases, no intermediate buffer is required anymore to convert between two different dtypes (i.e. when upcasting is necessary): the data is taken and upcasted in one step. These cases are optimized in Cython and more can be added if desired.
* Better support for `fill_value` parameters other than NaN: previously, all upcasting was done assuming NaN as the `fill_value`: now, the correct upcast will be chosen based on the type of the `fill_value`. (Ex. integers stay as integers with integer `fill_value` if the value can fit in the existing size without overflow, integers and floats upcast to complex with complex `fill_value`, all numerics upcast to objects with boolean or string `fill_value`, etc.)
* ~~Added option of `fill_value` of `None`, which means that the corresponding entries in the output are left unchanged (only really makes sense when `out` is also provided)~~

~~The last option is used to optimize `internals._merge_blocks` (i.e. the function internally called to do block consolidation): instead of `vstack`-ing the arrays together in an intermediate buffer and then rearranging into the output with a separate operation, the output buffer is allocated uninitialized and directly filled from the inputs using one call to `common.take_fast` per input block, even when they are not contiguous. (However, the special case of contiguous and already properly ordered blocks is still handed with `vstack`, since no other operation is required after that)~~

**EDIT: took out `fill_value` of `None` option and reverted `internals._merge_blocks`: it wasn't actually helping. Upcasting within take functions is definitely faster though.**

The existing vb_suite tests were not really testing upcasting, so I added one for it. Here are the results vs. master:
```
Results:
                                            t_head t_baseline      ratio
name
frame_reindex_upcast                       26.7874    34.3973     0.7788
```
and against jrebacks/dtypes:
```
Results:
                                            t_head t_baseline      ratio
name
frame_reindex_upcast                       23.8220    28.0891     0.8481
```