Improving release process

Current release process (in the upcoming `v0.4.0`):

```scala
          Seq[ReleaseStep](
            genDocsForRelease
          , checkSnapshotDependencies
          , inquireVersions
          , checkReleaseNotes
          , runTest
          , setReleaseVersion
          , commitReleaseVersion
          , tagRelease
          , publishArtifacts
          , setNextVersion
          , pushChanges
          )
 ```

proposed by @evdokim, we should try to publish earlier and fail everything if it fails. Second thing, is that generated docs should be committed (like version):

```scala
          Seq[ReleaseStep](
            // check artifact generation, smth like 'package'
          , genDocsForRelease // and commit if it's changed
          , checkSnapshotDependencies
          , inquireVersions
          , checkReleaseNotes
          , runTest
            // do 'set version in ThisBuild := ...' for publishing
          , publishArtifacts // <-- moved here
            // if it succeeds, continue:
          , setReleaseVersion
          , commitReleaseVersion
          , tagRelease
          , setNextVersion
          , pushChanges
          )
 ```