correct/optimize width table ; support CJK locale

- When extracting W, F, and A widths, we must ignore the categories
  explicitly designated as spacing. Thus, rewrote the
  load_east_asian_width function to support excluding certain
  categories.

- When possible, collapse adjacent spans in width table to improve the
  speed of the binary search.

- CJK support: .width() takes a boolean argument is_cjk which makes
  Ambiguous width characters return 2 instead of 1 when true.