Overload KeepColumns, option for throwOnMissing

Overload the `MutableDataTable.KeepColumns()` method to allow the user to specify whether or not the function should throw an exception when a column in the list is missing.

The logic of the function is refactored to avoid setting the `Column` array until all columns are set, since it is not known ahead of time how many will match.

Supporting unit tests are also added.