Switch json parsing to read_chars for performance

Avoids the overhead of read_char for every character.

Benchmark reading example.json 10 times from
https://code.google.com/p/rapidjson/wiki/Performance

Before: 2.55s
After:  0.16s

Regression testing is already done by isrustfastyet.
str: stop encoding invalid out-of-range `char`
Faster check for ascii-space

Since ' ' is by far one of the most common characters, it is worthwhile
to put it first, and short-circuit the rest of the function.

On the same JSON benchmark, as the json_perf improvement, reading example.json
10 times from https://code.google.com/p/rapidjson/wiki/Performance.

Before: 0.16s
After: 0.11s
Merge branch 'unicode_perf' into json_perf
Update existing tests to account for stricter, more correct handling of irrefutable patterns
Add new tests for irrefutable patterns used in various tricky ways
update ptr intrinsics and rewrite vec routines to be more correct.

In particular, it is not valid to go around passing uninitialized or zero'd
memory as arguments. Rust should generally be free to assume that the arguments
it gets are valid input values, but the output of intrinsics::uninit() and
intrinsics::init() are not (e.g., an @T is just null, leading to an error
if we should try to increment the ref count).
Patch up some code that was using irrefutable patterns incorrectly.
syntax: Patch up code that was using irrefutable patterns incorrectly
extra: Patch up code that was using irrefutable patterns incorrectly.
Make all allocas named so we can see where they originate
in the generated LLVM code.
Update trans to use type to decide when to move, not the moves table (simpler
for cases where it's hard to decide what id to use for the lookup); modify
irrefutable bindings code to move or copy depending on the type, rather than
threading through a flag. Also updates how local variables and arguments are
registered. These changes were hard to isolate.
Modify borrow checker to visit irrefutable patterns that appear in
let and function arguments; modify type checker to store type
information for all patterns and handles some missing cases.
Miscellaneous fixes and cleanup
This assert does not necessarily hold; sometimes we temporarily increase ref-count
Address nits by @catamorphism
Patch up some new errors from rustpkg
Fix pretty printer, which was ignoring `ref` in irrefutable patterns
Move stats into an @mut stats
Add llvm instrumentation