Auxiliary functions for extents and strides were using different
functions. Additionally, many tags were used to distinguish between
different tensor types. This patch simplifies interfaces of different
core functions and unifies functions that can process different types of
extent and stride types.
* decomposing tensor class into seperate modules according to the extents type
* stabilizing and updating test. Adding support for the operations b/w different types of tensor
* updating examples
* changing tabs to spaces
* added constexpr, removed resize from tensor and changed the array_type to container_type
* changing tag names and refactoring code
* adding and updating examples
* adding new line at the end of file
* refactoring code, fixing bugs and adding few new examples
* refactoring examples
* fixing gcc-7 issue where it is unable to use deduction guide when initilized
* adding constexpr and inline
* adding noexcept
* adding is_static_rank_v
* removing extents.hpp and decoupling test_extents and test_strides
* refactoring code and adding constexpr with [[nodiscard]] to the functions
* refactoring code.
* adding missing iterator header
* changing helper function name