Interfaces

Lots of work for Interfaces as discussed with the working group.

There are many changes here, there need to be more I think, as the unit tests have errors.

I would also recommend that this be rebased and squashed before inclusion into the release branches as there are a lot of commits, and probably will be more.