Added tests. Fixed few minor issues found while writing tests.

Added tests. Fixed few minor issues found while writing tests.
Fixes #5 
But they are like "interface" attrs  - if someone wants to add it's own custom check - they should be aware of them (and set them).  I just thought that if we mark them as internals - we shouldn't `expose` them for customization.  But it's definitely not in scope of this pull.