Model fully implemented, increased encapsulation

Model is theoretically complete, design may change if there are any
oversights. Abstract class removed as C# requires the base class to have
the same visibility as the child class, and didn't provide much anyway.