Use self-copy shortcut only when size matches as well.
Add C++11 range-based for loop support for slice and vector.
Use -Wall -Wextra -Werror, and fixes to make it work.