WIP: refactoring traitlets to support nipype requirements

The main additions are: 

- Dict
- Either
- File
- Directory

This PR primarily serves as a placeholder for changes required to support nipype. It may turn out that some of these changes are orthogonal to IPython's view of traitlets (for example, support for Undefined as a valid value for any trait).