public class RsLangs
extends Object
A set of languages, each represented by a canonical string object
 The set is stored without any subsumed elements
 
 Instances of this class are shareable
 Duplicate-on-update strategy
   Requires that all update operations to it return the
     possibly new RsLangs object, and that calls are always of the form
       rsLangInstance = rsLangInstance.[some-update-operation]
   Requires that all copy operations set the shared bit:
     copiedInstance = origInstance.setShared(); 
  
 A instance marked isShared == true is immutable
   Updates cause duplication.
   
 Users store x-unspecified as null for the rsLangs instance
   Because of this, users use static methods, passing in as the first argument,
   the value of rsLangs, and getting an updated value of rsLangs.
     This allows the passed-in value to be null.
  
 Languages kept in canonical form:
   duplicates removed
   subsumed languages removed
   language strings mapped to unique strings (allowing == comparisons)
 Languages kept in array list, to allow for expansion
   Languages not removed, only added (for a given tof)