Updated pop() and added some convenience functions

1.) pop() now returns the element that was removed from the stack to the user

2.) Overloaded the insertion operator (operator<<) for use in unit testing and other potential use cases. Currently, it calls a private helper function called print( std::ostream & out ), which writes each element to a new line (i.e. std::endl).

3.) Added constant print( std::ostream & out ), a private helper function that writes each element to a new line (i.e. std::endl).

4.) Added a constant public size() function that returns the number of elements on the stack.

5.) Fixed a bug in the operator=()’s self-assignment check that caused it to return the wrong value (&this vs *this).