Initial commit

Unit test for sorting 1,000,000 elements using selection sort and heap
sort with timer.
Replace hand-written loop in SelectionSortAlgorithm with std::min_element
call.
Clean up std::priority_queue declaration in HeapSortAlgorithm.
Play around with <random> header features. Add test for selection sort
using std::greater<>. Add test for std::sort to compare benchmarks.
Remove unneeded header <type_traits> from SortAlgorithms.h.
Replace hand-written for loop with std::for_each().
Comment out call to print random values.
Fix strict weak ordering assert generated by make_heap debug code in STL.

Implement function adapter BinarySwap that swaps the arguments passed to
a binary function. Implement helper function makeSwap that constructs a
BinarySwap adapter. Use makeSwap in priority_queue declaration.
Implement insertion sort.
Replace std::advance(begin, 1) call with preincrement operator.
Wrap BinarySwap<> in detail namespace. Add utility printRange function to
detail namespace.
Add quicksort algorithm with debug code commented out.

Still need to fix stack overflow.
Implement iterative quicksort using an explicit stack.
Rewrite insertion sort to use std::inplace_merge().
Remove blank line
Implement random iterator tag version of HeapSort.

Split implementation of HeapSortAlgorithm into two functions that take an
iterator tag as a fourth parameter. For unknown tags, the old
priority_queue algorithm is used. For random access iterator tags,
std::make_heap and std::sort_heap are used directly.
Added std::list test case for HeapSort.
Clarified greater than selection sort output message.
Use local lambda function as comparator for priority_queue.

Remove implementation of BinarySwap function adapter. Add lambda to
heapSort helper that works on forward iterators.
Simplify logic for iterative quicksort.

Do not push ranges onto the stack that will just be skipped.