Creation of BaseSieve

This resolves #28.

`BaseSieve` will hold the common functionality of a Sieve, which is really all functionality with the exception of `ToExpression()` and `ToCompiledExpression()`, which will throw `NotImplementedExceptions` if called directly.

Exceptions / Notes:
----
* I expect we'll be making `AcceptableValues` virtual too, or creating strategies for the different behaviors we expect and enforcing the usage of those.
* We may need to change the unit tests to accurately reflect that they apply to `BaseSieve` now. Not too worried about this as the moment though; the more test coverage the better. I've created #54 to discuss this further.