Refresh memory::buffer implementation

buffer and array_buffer were suffering of some design issue : 

 - its divergence from some standard sequence concept 
 - its silent 'not really empty' trick to make some function works on empty table
 - array_buffer was relatively redundant with boost::simd::aligned_array

This series of patch make buffer more STD like, remove the 'not really null' hack and reimplement functions that required it. This is also a transition to a c++11 friendly implementation.

isn't that the opposite of what we want?
here we want to swap the buffers without touching the data.