Add support for custom property types.

Addresses #305 
- [x] Add tests
- [ ] Add documentation

I'll work on adding doco soon