Function for merging tables according to registered broadcasts

Example from the tests:

```python
sim.broadcast('a', 'b', cast_index=True, onto_on='a_id')
sim.broadcast('z', 'b', cast_index=True, onto_on='z_id')
sim.broadcast('b', 'c', cast_index=True, onto_on='b_id')

merged = sim.merge_tables(
    target='c', tables=[dfa, dfz, dfb, dfc], columns=['a1', 'b1', 'z1', 'c1'])
```

Where `dfa`, etc. are the wrapped DataFrames with names `'a'`, etc.

This includes a `utils.misc.column_map` function that will address #54 and will finish off everything discussed in #42.