Avoidable memory error when dealing with large column assignments
When dealing with data sizes at the limit of the machine, pandas produces a memory error when one tries to assign a numpy array to a equally typed and sized pandas column. `__setitem__()` seems to force an unnecessary copy since assigning directly to the array backing the block is possible:

```
In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: M,N=int(1e7),10

In [4]: A1=np.zeros((M,N),'f', 'F')

In [5]: df_A1 = pd.DataFrame(index=xrange(M), columns=range(N), dtype='f')

In [6]: X=np.arange(M+0.0)

# assigning directly to column of array backing the DataFrame works:

In [7]: df_A1._data.blocks[0].values[0,:] = X

# assigning to column of the DataFrame fails:

In [8]: df_A1[0] = X
---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-9-c37d594d8c18> in <module>()
----> 1 df_A1[0]=X

C:\Anaconda\envs\finance1\lib\site-packages\pandas\core\frame.pyc in __setitem__
(self, key, value)
   2115         else:
   2116             # set column
-> 2117             self._set_item(key, value)
   2118
   2119     def _setitem_slice(self, key, value):

C:\Anaconda\envs\finance1\lib\site-packages\pandas\core\frame.pyc in _set_item(s
elf, key, value)
   2193         self._ensure_valid_index(value)
   2194         value = self._sanitize_column(key, value)
-> 2195         NDFrame._set_item(self, key, value)
   2196
   2197         # check if we are modifying a copy

C:\Anaconda\envs\finance1\lib\site-packages\pandas\core\generic.pyc in _set_item
(self, key, value)
   1188
   1189     def _set_item(self, key, value):
-> 1190         self._data.set(key, value)
   1191         self._clear_item_cache()
   1192

C:\Anaconda\envs\finance1\lib\site-packages\pandas\core\internals.pyc in set(sel
f, item, value, check)
   3000                 else:
   3001                     self._blklocs[blk.mgr_locs.indexer] = -1
-> 3002                     blk.delete(blk_locs)
   3003                     self._blklocs[blk.mgr_locs.indexer] = np.arange(len(
blk))
   3004

C:\Anaconda\envs\finance1\lib\site-packages\pandas\core\internals.pyc in delete(
self, loc)
    274         Delete given loc(-s) from block in-place.
    275         """
--> 276         self.values = np.delete(self.values, loc, 0)
    277         self.mgr_locs = self.mgr_locs.delete(loc)
    278

C:\Anaconda\envs\finance1\lib\site-packages\numpy\lib\function_base.pyc in delet
e(arr, obj, axis)
   3615         keep[obj, ] = False
   3616         slobj[axis] = keep
-> 3617         new = arr[slobj]
   3618
   3619     if wrap:

MemoryError:
```

Am I doing something wrong? Is there a better/correct way of assigning data to a column?
