re-implement dataset in terms of protocols
add column-major implementation
add matrix wrapper dataset