Add Dictionary interface & rename old Dictionary class to DefaultDictionary implementing Dictionary instead of Input.
Add new DataType enum, replacing the old inner enum Input.Type.
Other minor refactoring for consistency & clarity.