rxScala refactor

Split out to a sharable core, async and rxScala versions.