+ planmaestro.py : definición de clases para el plan maestro

El nuevo archivo planmaestro.py define las clases correspondientes al
diseño del plan maestro :

 * EstadioFenologico
 * UmbralOptimoDeCultivo
 * PlanMaestro

Además, se requería la definición de una clase para representar rangos,
con lo cual se definió 'Rango', también en planmaestro.py. Sin embargo,
creo que debería ir en otro lado, por ahora lo dejo acá. Por otro lado,
se solapa bastante con el 'Intervalo' que aparece en app.py.

planmaestro.py contiene una pequeña demo para ver la funcionalidad en la
repl o en la consola. Si se usa en la repl, puede aprovecharse el
resultado (un PlanMaestro) para explorarlo un poco.

No se incluyen tests (TODO).
Unificación Intervalo -> Rango (los lapsos son rangos)

En el diseño se hablaba tanto de lapsos como de rangos, pero no de
intervalos. Por otro lado, los lapsos estaban implementados con la clase
'Intervalo' y los rangos con la clase 'Rango', pero eran idénticas en su
comportamiento excepto los nombres y la igualdad (que no estaba en
'Rango' pero ya se incorporó). Ahora en todos los lugares donde se usaba
un lapso ('Intervalo'), ahora se usa un rango ('Rango'). Los métodos son
'desde'/'hasta'/'contiene'.

La clase 'Rango' fue mudada a magnitudes.py (ver comentarios en la
sección que corresponde de dicho archivo), estaba en planmaestro.py.

También hice algunas modificaciones menores en los tests (más alla de
las adaptaciones para incorporar 'Rango'). Por ejemplo había un bug en
test/test_central_meteorologica.py: se había omitido el 'raise' para
lanzar una excepción 'ValueError', con lo cual el test reportaba
'unexpected success'. También cambié los 'AssertTrue' a las versiones
para los comparadores, o sea 'AssertNotEqual', 'AssertLess', etcétera,
para que quede más homogéneo con 'AssertEqual' que ya estaba usado (se
estaba usando 'AssertTrue'/'AssertFalse' para verificar comparaciones).
Duración es una Magnitud : Segundos,Minutos,Horas. +tests.

Ahora las duraciones son magnitudes, pueden convertirse entre ellas de
la forma usual. Hay algunos tests que verifican que las conversiones
funcionen en forma razonable.
Temporizador : actualizado con duraciones y velocidad (escala de tiempo)

La versión original del temporizador se programaba con una cantidad en
segundos (un número), pero ahora que contamos con duraciones en
distintas unidades, podemos aprovecharlas para el temporizador. Ahora,
el método 'ejecutarCada' toma una instancia de 'Duracion' en lugar de un
número (representando segundos). Esto aumenta la claridad y es más
cómodo.

Por otro lado, la duración puede interpretarse en una escala dada, lo
cual permite reinterpretar el significado de un 'segundo' de la duración
en términos del tiempo del sistema operativo. Esto técnicamente no es
necesario ya que siempre el llamador puede por su cuenta efectuar el
escalamiento, pero creo que no está mal tenerlo acá, sobre todo si los
temporizadores se usaran en un entorno de simulación en que el tiempo
puede comprimirse o dilatarse (con respecto al tiempo real), los
temporizadores se inicializan todos con un mismo factor de escala y se
encargan ellos del ajuste.

Ahora también se pueden pasar argumentos en la programación de la
tarea (sólo necesario si se programa una tarea que requiere argumentos).

Las tareas ahora pueden detener al temporizador que los programó.

La demo también fue aumentada para mostrar los cambios.

Detalle trivial: los nombres de los métodos de interfaz ahora comienzan
con minúscula.