Some functional goodies for Otter, for use in convergence

- depend on pyrsistent
- add freeze and unfreeze functions to otter.util.fp
  (to be contributed to pyrsistent)
- add "partition_bool" and "partition_group" functions to otter.util.fp
  (to be used by convergence)
Are you asking just about eqtype, or IsTypeAndValue too?

eqtype is just a trivial convenience function so that the assertions are more concise. IsTypeAndValue is because m() == {} and v() == [] but I wanted to specifically ensure that the types of the return values were pyrsistent types.