Move begin(), end() iterator functions outside of array_t

- To keep array_t simple
- Add fill(dst, value) function
Arrange array_t: divide required conectps and syntatic sugars
Change empty array: data buffer is nullptr and shapes are all zero