pd.Categorial and level ordering and adding to a DataFrame
As part of https://github.com/yhat/ggplot/issues/188 I'm trying to build a `factor` function which works the same way as the one in R (e.g. https://www.stat.berkeley.edu/classes/s133/factors.html) and which I could use to store factors in a dataframe.

What currently does not work is ordering:

```
mons = c("March","April","January","November","January",
+ "September","October","September","November","August",
+ "January","November","November","February","May","August",
+ "July","December","August","August","September","November",
+ "February","April")
factor(mons,levels=c("January","February","March",
+               "April","May","June","July","August","September",
+               "October","November","December"),ordered=TRUE)
```

Currently I see no way to make a change to the ordering of the levels to a predefined list.

``` python
In [69]: pd.Categorical(["b","a","c","a","c"], levels=["a","b","c"])
Out[69]: <repr(<pandas.core.categorical.Categorical at 0xb7f28d0>) failed: ValueError: invalid literal for long() with base 10: 'b'>
```

[The problem here seems to be that `pd.Categorial.__init__()` expects the arguments to be already transformed to a factor data structure (list of index positions + labels) and the above is actually a "labels + label ordering" structure]

`pd.Categorial.from_array()` only takes a `data` argument, but no ordering :-(

It seems that `pandas.core.algorithms.factorize()` was once intended to do that, but the `order` keyword is not used in the actual implementation (https://github.com/pydata/pandas/blob/master/pandas/core/algorithms.py#L116).

I'm not sure what I should do with `ordered =[True, False]`. What I think it should do is to remove some standard ordering operations in case of `ordered == False`?

Another problem is that i can't roundtrip factors into a dataframe:

```
>>> df = pd.DataFrame({"a":["b","a","c","a","c"]})
>>> df["factor"] = pd.Categorical.from_array(df.a)
>>> df
   a factor
0  b      b
1  a      a
2  c      c
3  a      a
4  c      c
[5 rows x 2 columns]
>>> df.factor
0    b
1    a
2    c
3    a
4    c
Name: factor, dtype: object
```

-> There is no level attribute anymore :-(
