Improve buffer and range implementation with more constructors

Use both boost::multi_array and boost::multi_array_ref for the allocation and
multi-dimensional view.
Add a vector_add example that does not work yet because the buffer
copy-back is not implemented yet.