[feature] have shNode keep a reference to owning structure

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[feature] have insert optionally return ref shNode

For structures that give shNode back, such as shList, shMap and shHeap,
the functions that insert data, take an optional shNode *ref argument.
This argument, if provided, will give back a reference shNode to the
node just inserted (if operation was successful).

This would be very useful if a reference to the immediately inserted
node is required.  Making the argument optional means that in many cases
that this argument is not required, the code is not cluttered.

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