BUG: multiple assignments with a multi-dim-like
This multiple-assignment indexing broke in numpy 1.10 because I think it accidently broadcast certain things.

```
        df = DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                        'B': ['B0', 'B1', 'B2', 'B3'],
                        'C': ['C0', 'C1', 'C2', 'C3'],
                        'D': ['D0', 'D1', 'D2', 'D3']},
                       index=[0, 1, 2, 3])
        df[['A','B']] = [[1,1,1,1],[2,2,2,2]]
```

e.g. fails in 1.10, but works in 1.9

http://stackoverflow.com/questions/33818388/python-pandas-updating-multiple-columns-using-lists-failed-in-v-0-17

Here's a patch that papers this over, but only if its a single block.

I think the right way to do this is to detect this in `core/indexing.py` that we are doing a list-like on the lhs and have a multi-dim on the rhs, then assign them one at a time. This will fix the dtype conversion issue as well. (as my patch below fails on this). Also makes the indexing code _slightly_ simpler and less special casey.

```
diff --git a/pandas/core/internals.py b/pandas/core/internals.py
index 1b08140..0254e3e 100644
--- a/pandas/core/internals.py
+++ b/pandas/core/internals.py
@@ -717,7 +717,18 @@ class Block(PandasObject):
                 block = block.convert(numeric=False)

             return block
-        except (ValueError, TypeError) as detail:
+        except ValueError as detail:
+
+            # broadcasting of list-of-list can be incorrect
+            # in older numpy versions & works
+            # but fixed in numpy >= 1.10
+            if (values.ndim == arr_value.ndim) and (
+                values[indexer].shape == arr_value.T.shape):
+                values[indexer] = arr_value.T
+            else:
+                raise
+
+        except TypeError as detail:
             raise
         except Exception as detail:
             pass
diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py
index 0f6c6f0..11d100d 100644
--- a/pandas/tests/test_frame.py
+++ b/pandas/tests/test_frame.py
@@ -213,6 +213,34 @@ class CheckIndexing(object):
         expected = Series(['1', '2'], df.columns, name=1)
         assert_series_equal(result, expected)

+    def test_setitem_list_multiple(self):
+        # regression from 0.16.2
+        df = DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
+                        'B': ['B0', 'B1', 'B2', 'B3'],
+                        'C': ['C0', 'C1', 'C2', 'C3'],
+                        'D': ['D0', 'D1', 'D2', 'D3']},
+                       index=[0, 1, 2, 3])
+        df[['A','B']] = [[1,1,1,1],[2,2,2,2]]
+        expected = DataFrame({'A': Series([1]*4,dtype=object),
+                              'B': Series([2]*4,dtype=object),
+                              'C': ['C0', 'C1', 'C2', 'C3'],
+                              'D': ['D0', 'D1', 'D2', 'D3']},
+                             index=[0, 1, 2, 3])
+        assert_frame_equal(df, expected)
+
+        df = DataFrame({'A': -1,
+                        'B': -2,
+                        'C': ['C0', 'C1', 'C2', 'C3'],
+                        'D': ['D0', 'D1', 'D2', 'D3']},
+                       index=[0, 1, 2, 3])
+        df[['A','B']] = [[1,1,1,1],[2,2,2,2]]
+        expected = DataFrame({'A': 1,
+                              'B': 2,
+                              'C': ['C0', 'C1', 'C2', 'C3'],
+                              'D': ['D0', 'D1', 'D2', 'D3']},
+                             index=[0, 1, 2, 3])
+        assert_frame_equal(df, expected)
+
     def test_setitem_list_not_dataframe(self):
         data = np.random.randn(len(self.frame), 2)
         self.frame[['A', 'B']] = data
```
