semver 和 publish 的调整


* [x] 添加 package 对于 semver 支持

  ```
比如：
repository/sorrycc/~1.2.1 > sorrycc@1.2.2
package/sorrycc/~1.2.1 > sorrycc@1.2.2
```

* [x] 删除 `publish -f` 支持

* [x] 调整 `unpublish`。不直接删除 package 或 project，只做信息清空，避免变相达到 `publish -f` 的操作

  1. `unpublish` Package 时，添加 `unpublished` 信息，删除 tar 包
  1. `unpublish` Project 时，添加 `unpublished` 信息，同时对所有的 Package 做 `unpublish` 处理
  1. `publish` Package 时，Project 删除 `unpublished` 信息，Package 不允许覆盖
  1. 其他对于 Project 和 Package 的处理，过滤掉包含 `unpublished` 信息的

---

相关 issue： spmjs/spm/issues/1001 ， spmjs/spm/issues/1000

从 npm 上 copy 来的。。两个意思差不多。