revisão do código. Nada de novo por enquanto
Merge branch 'master' of https://github.com/Fichberg/NetSim into alternativo

Conflicts:
	Host.java
	InputReader.java
	Router.java
Router atualizado para ficar (bem) mais simples;
O arquivo de entrada também foi atualizado para conter
toda a configuração do simulador
Criando um sistema de parsing mais simples;
Ainda não compila, falta terminar o regex e
fazer a ligação com as estruturas de dados
Fazendo o parsing inteiro do simulador agora
O InputReader foi modificado drasticamente por vários motivos:
1) Havia uma pressuposição errada sobre os nomes e identificadores de
hosts, routers e o nome do simulador (um host não precisa se chamar hX.
O que define um host é o que vem entre colchetes. O mesmo vale para
outros elementos da rede. Veja aqui:
http://nile.wpi.edu/NS/simple_ns.html).
2) Havia a ideia de que as instruções sempre viriam numa mesma
sequência, o que também está errado. Um host certamente precisa ser
declarado antes de ser usado, mas é possível trocar ainda muita coisa
de lugar sem problemas.
3) Faltou usar a ideia de group matching em regex. Isso elimina a
necessidade de ficar fazendo matching manual caractere a caractere e
coisas do tipo. Com isso, o código diminuiu pela metade e ficou menos
complexo.

Também foram criadas diversas classes novas:
- Agent: superclasse para DNSServer, FTPClient, FTPServer, HTTPClient,
  HTTPServer e Sniffer (subclasses também são novas)
- Node: superclasse para Host e Router
- AgentEnum: um enumerador para os tipos de agentes

Para que pudesse testar e compilar, quase tudo do código antigo do
InputReader foi removido, mas ele deve ser reaproveitado! Sobretudo a
parte de tratamento de erros (com as devidas adaptações, claro). Nesta
versão os erros não estão sendo checados.
roteamento funcionando

- Como funciona o roteamento?
Os hosts se comunicam enviando pacotes (class Packet), que possuem um
IP de origem e destino na camada da Internet. Para enviar um pacote, um
host precisa enviar o pacote para o enlace (class DuplexLink), que
passará o pacote adiante até a outra ponta. Um roteador fica em loop
lendo e roteando os pacotes que ficam nos buffers de cada porta que
chega do enlace. A tabela de roteamento (atributo routes) define para
qual enlace o roteador deve repassar o pacote. O processo segue adiante
até que: a) ou o pacote é derrubado no caminho por n motivos; b) ou o
pacote é salvo no buffer do Host de destino.

- O que falta fazer?
  > criar as camadas de aplicação (vai dar trabalho)
  > camada de transporte +- implementada, mas não utilizada ainda
  > pensar numa forma de executar o programa do NetSim
  > criar os timers para Router e Hosts (já são threads agora)
  > fazer os sniffers funcionarem (eles estão integrados ao DuplexLink)

Não podemos nos esquecer que quem mexe em Aplicação e Transporte são só
os Hosts (além dos Sniffers, para ler os dados, mas é exceção). Por
isso, a complexidade está nas bordas. A parte mais baixo nível das
conexões parece estar OK.