b5082f6640
- Remove the unnecessary `ContainerValue` from the class hierarchy - Construct `StringValue` with a `std::string` by value to avoid copies - Remove some indirection by using type names directly instead of aliases - Use utility methods to lookup/append specific data types for arrays/dicts - Simplify conversion from unique_ptr to shared_ptr - Avoid use of `new` and `delete` - Avoid creating maps of all elements in vector for a single lookup