Bring Scala API up to speed with Java API

First of all, don't try reading central Scala API rewrite commit. It's basically a rewrite from Scratch, so the diff won't make a lot of sense. Just look at the result.

The commits before the central commit massage the rest of the system into shape to allow the rewrite. The commits after change some small things and add examples and ITCases.

@mbalassi: How's that for working on Sundays... :smile_cat: 
tabs vs spaces