BUG: Fix the rename function for Series and DataFrame, #3165

### Bug 1: After `rename`, the `name` of the `index` is missing:

    In [1]: import pandas as pd

    In [2]: data = [1, 2]

    In [3]: index = pd.Index(['a', 'b'], name='name')

    In [4]: df = pd.DataFrame(data, index=index)

    In [5]: df 
    Out[5]: 
          0
    name   
    a     1
    b     2

    In [6]: df.rename({'a': 'c'})
    Out[6]: 
       0
    c  1
    b  2

Both `Series` and `DataFrame` has the same problems. The reason is that we didn't set the `name` of the `index` while reconstructing the `DataFrame/Series` by `rename` .

### Bug 2: `rename` cannot work for the `MultiIndex` case, the `index` becomes tuples, the `names` of the index are gone

    In [1]: import pandas as pd

    In [2]: data = [1, 2]

    In [3]: index = pd.MultiIndex.from_tuples([('a', 'b'), ('c', 'd')], names=['name1', 'name2'])

    In [4]: df = pd.DataFrame(data, index=index)

    In [5]: df
    Out[5]: 
                 0
    name1 name2   
    a     b      1
    c     d      2

    In [6]: df.rename({'a': 'e'}) 
    Out[6]: 
            0
    (a, b)  1
    (c, d)  2

The missing name issue is same as Bug1. The original `rename` function convert the dict to the mapper function and map each tuple but not each index, and doesn't reconstruct it as `MultiIndex`, so it becomes a `Index` with some tuples.

### Fix

I've fixed the above two bugs, the `rename` will also pass the `name` of the `index` too, the `rename` mapper will go through each index for the `MultiIndex` case now.
I also added some test cases in `test_series.py` and `test_frame.py`