Add `Show` and `Clone` trait to arrays

Due to not being able to parametrize over array sizes, `Clone` is only
implemented for element types that are `Copy`able.
You should be able to implement for non-Copy Ts unsafely:

```rust
fn clone(&self) -> [T, ..$N] {
    let mut cloned: [T, ..$N] = unsafe { mem::zeroed() };
    for i in range(0, $N) {
        cloned[i] = x[i].clone();
    }
    cloned
}
```

I think this is safe with regards to destructors and `clone()` failing but someone else should confirm. :-)