Feature suggestion: custom DataFrame HTML display (for IPython notebook)
I looked briefly at your new custom styling feature from version 0.17.1 (http://pandas.pydata.org/pandas-docs/stable/style.html). I'm excited about the possibilities of custom styling and all the benefits it would allow researchers, but I feel that the current interface is somewhat non-intuitive and limited.
I would like to suggest a single generic feature that has the potential to include almost all other existing features, and allow a lot more flexibility. The idea is to allow overriding the default function that "draws" the elements in the dataframe as HTML table cells.

Let's say that this drawing function is `df.style.draw_element` and it receives the following arguments:
- **value** (any object/dtype): the value of the element to display
- **column** (str): the name of the value's column
- **row** (pandas.Series): the value of the entire element's row (if one wants to make a context-dependent drawing)

Additionally you can also add **index** and **df** as arguments, if you want to allow even more flexible context-dependent drawing.

The default built-in implementation of this function is just:
`def draw_element(value, column, row): return str(value)`
(i.e. every element is just displayed as it is)

But now, it will allow users to override it and add their own cool functionality. For example, one could do the following:
`df.style.draw_element = lambda: value, column, row: str(value) if value >= 0 else '<div style = "background-color: red;">%s</div>' % str(value)`
This will highlight in red all the negative values in the table.

This trick is already achievable with the current interface, but here's another example for some cool application that I don't think can be achieved with the current interface. Suppose that a bioinformatician working with DNA sequences (made of the four letters A, C, G, T) is interested in drawing each DNA letter with a different color (although all the letters are part of a single sequence within the same element in the dataframe). Using the new interface she will be able to simply do the following:
`df.style.draw_element = lambda: value, column, row: ''.join(['<span style = "color: %s;">%s</span>' % (get_dna_letter_color(letter), letter) for letter in value]) if 'dna' in column.lower() else  str(value)`
How cool is that? :)
