Feature Default Keys for AutoParameter

Created `DefaultKey` and `DefaultMinMaxKey`  base classes to be used as the `TKey` for `AutoParameter<T, TKey>`.  Users should be able to easily define keys like so:

```c++
// integer param that defaults to 15
struct MyDefaultKey : DefaultKey<int, 15> {};
AutoParameter<int, MyDefaultKey> param1;

// integer param that defaults to 15 and must fall within 10 and 20
struct MyDefaultMinMaxKey : DefaultMinMaxKey<int, 15, 10, 20> {};
AutoParameter<int, MyDefaultMinMaxKey> param2;
```