BUG: Various inconsistencies in DataFrame getitem/setitem behavior (fixes #2765)
see #2765 

Note, to address " ___getitem___ does not reindex boolean Series key but ___setitem___ does ", I have changed the ___getitem___ behavior rather than the ___setitem___ behavior because it is more consistent with other indexing behavior and does not break any tests...just in case, I have inserted a warning about this happening (which only triggers when a reindex is actually required)

Also, in addition to resolving the bugs, I have refactored the code to make ___getitem___ and ___setitem___ code paths as symmetric as possible, in order to help prevent more issues in the future.
