Add `recover` and `clusterstop` to `gpsegwalrep.py`
Add `recover` and `clusterstop` to `gpsegwalrep.py`

`recover` is same as `start`, which will restart the 'down' mirrors.

`clusterstop` will stop the entire cluster properly instead of rely on
`killall postgres`

We also refactored the code to move the filter functionality inside
`ClusterConfiguration`, so that it will simplify the logic in all other
operation functions like `StartInstance`, `InitMirrors`,
`StopInstances`, `DestroyMirros`, and `ForceFTSProbeScan`.

The original filters become asserts to ensure proper assumptions hold.

Author: Xin Zhang <80ac6425c128040c27b3c6077c824bc26222f5e7@pivotal.io>
Author: Ashwin Agrawal <924bf3437ad315c1c74f9c41d83153600b05f548@pivotal.io>

adam8157/gpdb,adam8157/gpdb,edespino/gpdb,lisakowen/gpdb,50wu/gpdb,edespino/gpdb,yuanzhao/gpdb,yuanzhao/gpdb,edespino/gpdb,jmcatamney/gpdb,jmcatamney/gpdb,yuanzhao/gpdb,xinzweb/gpdb,50wu/gpdb,ashwinstar/gpdb,greenplum-db/gpdb,yuanzhao/gpdb,jmcatamney/gpdb,ashwinstar/gpdb,jmcatamney/gpdb,jmcatamney/gpdb,adam8157/gpdb,greenplum-db/gpdb,Chibin/gpdb,ashwinstar/gpdb,adam8157/gpdb,50wu/gpdb,Chibin/gpdb,ashwinstar/gpdb,xinzweb/gpdb,Chibin/gpdb,yuanzhao/gpdb,greenplum-db/gpdb,yuanzhao/gpdb,xinzweb/gpdb,edespino/gpdb,edespino/gpdb,yuanzhao/gpdb,edespino/gpdb,greenplum-db/gpdb,xinzweb/gpdb,ashwinstar/gpdb,edespino/gpdb,xinzweb/gpdb,adam8157/gpdb,edespino/gpdb,adam8157/gpdb,50wu/gpdb,yuanzhao/gpdb,50wu/gpdb,Chibin/gpdb,50wu/gpdb,xinzweb/gpdb,lisakowen/gpdb,jmcatamney/gpdb,lisakowen/gpdb,edespino/gpdb,xinzweb/gpdb,yuanzhao/gpdb,jmcatamney/gpdb,greenplum-db/gpdb,adam8157/gpdb,Chibin/gpdb,adam8157/gpdb,ashwinstar/gpdb,ashwinstar/gpdb,edespino/gpdb,Chibin/gpdb,lisakowen/gpdb,50wu/gpdb,lisakowen/gpdb,greenplum-db/gpdb,lisakowen/gpdb,Chibin/gpdb,lisakowen/gpdb,Chibin/gpdb,ashwinstar/gpdb,jmcatamney/gpdb,Chibin/gpdb,Chibin/gpdb,xinzweb/gpdb,50wu/gpdb,greenplum-db/gpdb,lisakowen/gpdb,greenplum-db/gpdb,yuanzhao/gpdb