Additional API interfaces and implementations


	
This should get us up to speed on most of the API stuff, in this PR we've got interfaces and implementations for: 
* Motors 
* Gyroscopes 
* Distance Sensors 
 
The only thing missing from last years robot is the accelerometer 
 
It also adds the `LimitedMotor` composite class and JUnit test cases, which though similar in concept to `SolenoidWithPostion`, isn't worth trying to abstract. 
 
Aside from that I fixed some documentation and refactored Hardware so that similar factory methods are in nested classes. 
 
Some things that might be worth considering: 
* The `Hardware` and `Mock` prefixes are a little overkill, the names are different enough to prevent conflicts, and if not, they're in separate packages. 
* If we are going to rely on the accelerometer and gyroscope more heavily then last year, it might be beneficial to have some helper classes that allow us to attach units and direction to a value, e.g. `Angle`, `Velocity`, `Displacement`, etc. 
Don't you want to use `speed` here rather than `1.0`?

What do you think about pulling the math logic into a separate private method:

    private double validateSpeed( double input ) {
        speed = Math.abs(speed);
        speed = Math.min(1.0, speed);
        speed = Math.max(0.0, speed);
    }

That would make the `setHigh(...)` method more like:

    if ( isHigh() ) {
        motor.stop();
    } else {
        motor.setSpeed(validateSpeed(speed));
    }

Likewise, the `setLow(...)` would be:

    if ( isLow() ) {
        motor.stop();
    } else {
        motor.setSpeed(-1.0 * validateSpeed(speed));
    }

Also, the name `setHigh` has a very faint odor to it. Can you think of an alternative name? What about `moveToHigh(double speed)`, though I'm not sure it's better.