Added Filter root interface and IdentityFilter, documented code and wrote tests for IF
Changed hierarchy from interfaces to abstract classes so we can have privacy on our throwing methods, added MaxFilter and MaxFilterN with full documentation and tests