Support replicas in a slice

Currently, only RAID 0+1 like fragile cluster is supported.
For safety, each slice in slices should be replicable, like RAID 1+0.
(However, top-level replicas must be there even if RAID 1+0 like structure is supported, because it is useful to migrate an existing slice to new one.)

See also: http://itpro.nikkeibp.co.jp/article/Watcher/20060518/238330/

By this pull request, now there are 3 type volumes:

 1. SingleVolume, is a physical computer.
 2. SlicesVolume, is a collection of <Slice>s.
 2. ReplicasVolume, is a collection of volumes.

A Slice must have one of volumes.
For example:

~~~
  datasets:{
    Default:{
     replicas:[
       {
         slices:[
           { volume: { address:... } },
           {
             volume: {
               replicas: [
                 { address: ... },
                 { address: ... }
               ]
             }
           },
           {
             volume: {
               slices: [
                 { volume: { address:... } },
                 { volume: { address:... } },
                 {
                   volume: {
                     replicas: [
                       { address:... },
                       { address:... }
                     ]
                   }
                }
              ]
            }
          }
        ]
      }
    ]
  }}
~~~

It will be parsed as:

~~~
  ReplicasVolume:[
    Slices:[
      Slice:SingleVolume,
      Slice:ReplicasVolume:[
        SingleVolume,
        SingleVolume
      ],
      Slice:SlicesVolume:[
        Slice:SingleVolume,
        Slice:SingleVolume,
        Slice:ReplicasVolume:[
          SingleVolume,
          SingleVolume
        ]
      ]
    ]
  ]
~~~

Note, currently the top level ReplicasVolume is the Dataset itself.
It is dangerous, so we should change the structure like:

~~~
  datasets:{
    Default:{
      volume:{
        replicas:[...]
      }
    }
  }
~~~

This breaks backward compatibility - v2 catalogs have to be migrated when they are parsed.
So, after the change, catalog's spec version must be incremented to 3.

一般的な話なんですけど、`params`っていう名前に状態を保存していくやり方は避けたほうがいいんじゃないかなぁと思いました。`params`って名前だと「与えるデータ」ていう意味な感じがして、「データを保存する場所」っていうのに使うのは混乱を招く気がします。