Validate Node Names

<b>Additions</b>
-  Validate node names so that they do not break Javascript. 
Just re-read Orest's for loop and realized that my implementation can lead to an invalid name. For example passing "99Asdf" would lead to "9Asdf".

I agree that setting nil or empty string should be let through at this level. I propose the following:

```
- (void)setName:(NSString *)name {
    if (![name isEqualToString:_name]) {
        if ([name length] > 0) {
            // First remove from front until we have a valid starting character
            NSCharacterSet *validHeadCharacterSet = [NSCharacterSet letterCharacterSet];
            while ([name length] > 0 && ![validHeadCharacterSet characterIsMember:[name characterAtIndex:0]]) {
                name = [name substringFromIndex:1];
            }
            
            if ([name length] > 1) {
                NSString *tail = [name substringFromIndex:1];
                NSCharacterSet *validTailCharacterSet = [NSCharacterSet alphanumericCharacterSet];
                tail = [[tail componentsSeparatedByCharactersInSet:[validTailCharacterSet invertedSet]] componentsJoinedByString:@""];
                name = [[name substringToIndex:1] stringByAppendingString:tail];
            }
        }
        _name = name;
    }
}
```

Results:
```
nil -> nil
"" -> ""
"A" -> "A"
"9" -> ""
"99" -> ""
"99A" -> "A"
"AA9" -> "AA9"
"Cody99" -> "Cody99"
"99Cody" -> "Cody"
"£1asdf123" -> "asdf123"
```