[update] compare function in form of sh_compare

This commit changes the arguments of sh_compare to `const void *` to be
able to pass this function as the compare function of another structure.

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[list] update get_root/tail to get_first/last

This is in preparation for adding get_first/last to all shDS types.

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[feature] [vector] give get_first/last/next/prev

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[feature] [map] give get_first/last/next/prev

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[feature] [set] give get_first/last/next/prev

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[style] separate specific from common functions

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[feature] [list] add for_each

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[feature] [list] add compare functions

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>