Enable class objects to have const references

Add const qualifier to copy constructors, Clone(), and Set(). Also added a Set() to Dictionary that takes a reference instead of a pointer. These changes allow these examples to work:

```C++
String s("hello, world");  // the string is a const char, but String doesn't have a const initializer

Dictionary dict;
dict.SetValue("key", String("value");  // The temporary String object is a const type

void func(const String& s) {  // this may be OK...
    s.Clone();   // ...but no methods are usable since they are not declared const.
}
```