DataStruct::Vector BugFix and improvements

Bug fix and optimization
- Add and Insert now take a const reference to ItemType rather than a
copy of ItemType. This avoid extra calls to its constructor and
destructor.
- When assigning the value in Vector, placement new is used instead of
operator=.
- Iterator End() functions were returning the end incorrectly.
DataStruct::Vector - Cleanup

Code organization