moved OrderedDict into its own module to allow the library to be used when no OrderedDict is installed