Add num_variants intrinsic for enums and safe wrapper in std::reflect.

This adds an intrinsic to query the number of variants in an enum, along with a safe wrapper for it in std::reflect:

```rust
use std::reflect::num_variants;

enum Shape {
    Triangle,
    Square,
    Circle,
}

fn main() {
    let num_shapes: uint = num_variants::<Shape>();
    println!("{}", num_shapes); // prints 3
}
```

If the type parameter is not an enum, the result is 0.