Axis.Category._requestSpace caches character sizes

# cat-cache
![cat-cash-1](https://cloud.githubusercontent.com/assets/3344958/3379540/75d128fc-fbf3-11e3-8b79-6f9f3f44b7eb.jpg)

`catAxis._requestedSpace` decides how to fit ticks into their bounding boxes by inserting them into the DOM and then measuring them, letter-by-letter. This means a hundred or so touches to the DOM each time you call `_requestedSpace`, which makes it rather slow.

This branch changes `_requestedSpace` to measure and cache the dimensions of each character, and compute their sizes by adding up individual characters. This means you only touch the DOM as many times as you have letters, and caching means that further resizes will be much faster.

Adding up individual characters is only an approximation, but it's fairly accurate, always within `0.05` px of the actual measurement in my tests.

### Before (page load)

![screen shot 2014-06-24 at 4 23 19 pm](https://cloud.githubusercontent.com/assets/3344958/3379726/a177812e-fbf6-11e3-866f-8f2db5c03d7a.png)

### After (page load)
![screen shot 2014-06-24 at 4 22 06 pm](https://cloud.githubusercontent.com/assets/3344958/3379729/b3ca9366-fbf6-11e3-9394-ea941dc7377b.png)

### Before (resize)
![screen shot 2014-06-24 at 4 30 12 pm](https://cloud.githubusercontent.com/assets/3344958/3379790/d37ee3c8-fbf7-11e3-9af2-c6d76e4f0366.png)

### After (resize)
![screen shot 2014-06-24 at 4 29 40 pm](https://cloud.githubusercontent.com/assets/3344958/3379789/d07a9000-fbf7-11e3-982a-36ba20c94f6b.png)


Close #572.
```
arrayEq(null, null) -> true
arrayEq(null, undefined) -> false
arrayEq(undefined, undefined) -> true
arrayEq(null, x) -> false
arrayEq(undefined, x) -> false
```
and null is not violating the type signature, neither is undefined. here is copy+pasted from the typescript language specification:
The Null type corresponds to the similarly named JavaScript primitive type and is the type of the null literal. 
The null literal references the one and only value of the Null type. It is not possible to directly reference the Null type itself. 
The Null type is a subtype of all types, except the Undefined type. This means that null is considered a valid value for all primitive types, object types, and type parameters, including even the Number and Boolean primitive types. 


The Undefined type corresponds to the similarly named JavaScript primitive type and is the type of the undefined literal. 
The undefined literal denotes the value given to all uninitialized variables and is the one and only value of the Undefined type. It is not possible to directly reference the Undefined type itself. 
The undefined type is a subtype of all types. This means that undefined is considered a valid value for all primitive types, object types, and type parameters.