Add support for non-comparable types

This pull request adds support for non-comparable types, such as maps and slices, using the [reflect.DeepEqual](http://golang.org/pkg/reflect/#DeepEqual) function. This in turn "uses normal == equality where possible" so this shouldn't cause any problems.