UnicodeStrSlice: add width() and graphemes() methods

- `width()` computes the displayed width of a string, ignoring the width of control characters.
    - arguably we might do *something* else for control characters, but the question is, what?
    - users who want to do something else can iterate over chars()

- `graphemes()` returns a `Graphemes` struct, which implements an iterator over the grapheme clusters of a &str.
    - fully compliant with [UAX#29](http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries)
    - passes all [Unicode-supplied tests](http://www.unicode.org/reports/tr41/tr41-15.html#Tests29)

- added code to generate additionial categories in `unicode.py`
    - `Cn` aka `Not_Assigned`
    - categories necessary for grapheme cluster breaking

closes #7043
This whole `match` could be 

```rust
state = match state {
    Start if ch == '\r' => { /* handle special case */ }
    Start => match cat { 
         gr::GC_Control => break,
    // ...
};
```

rather than having `state = ` in each branch. Also, theoretically, you could write it as a match on `(state, cat)`, something like

```rust
state = match (state, ch) {
    (Start, _) if ch == '\r' => { .. }
    (Start, gr::GC_Control) => break,
    // ...
    (FindExtend, _) => { take_next = false; break; }
    (HangulL, gr::GR_L) => continue,
    // ...
}
```

although repeating the `state` element might get annoying (this would allow you to fold identical arms together, e.g. have a trailing arm that's `(FindExtend, _) | (HangulL, _) | (HangulLV, _) | ... => { take_next = false; break }`.