Allow widget views to be loaded from require modules

This required refactoring things that create widget views to use
callbacks instead of return values.
Make changes suggested by @jdfreder
Fix logic
Put callbacks for create_view and create_child_view in options

And add errback support
Clean up some JS code
Remove superfluous error checking
Fix ansispan() to ignore stray [0m
Use more yellowish color for ansiyellow
Test IPython.utils.fixConsole() (really ansispan())
Start describing how IPython works
Start describing notebooks for IPython architecture doc
Add about dialog in Notebook Help Menu.

This allow to get info on version of IPython when running remotely.
The about dialog also send a kernel info request and display the banner
which is useful for non-python kernel that don't match IPython version
Checks for metaclass's __repr__ in _type_pprint

RepresentationPrinter has a type pprinter for 'type' subclasses. It will
thus be called to print a class object (instance of 'type), avoiding the
__repr__ of the metaclass.

This patch checks for an overridden __repr__ before using the custom
type-representation logic.
Find and replace newlines in __repr__ results
Support echoing output from other clients

in the zmq console

Can result in outputs like:

```
In [1]: 1
[remote]In [1]: 1
[remote]Out[1]: 1
[remote]In [2]: 3
[remote]Out[2]: 3
Out[3]: 1
```

Note that there will be inconsistencies in prompt numbers
because some execution may take place after the in-prompt is drawn.
add ConsoleWidget.include_other_output

matches zmq console. Doesn't include `[remote] ` prefix,
because true async output makes it less important.
highlight input from other front ends

in qtconsole
Describe nbconvert in architecture doc
Add diagram of notebook components
Implement a couple of suggestions from @jhamrick