Final version.

-- What? --
A car store implementation.

-- How? --
Client-server multi-threaded, socket-based communication.
Need to start two JVM's. First, start a server by running Seller.class,
then separately start a client by running Customer.class. The
application runs automatically after the server and client are started.

The application does not use any generics, as I haven't found them
useful the way I wrote the code.

-- Execution description --
  - Seller -
  It opens a listening socket, then he accepts a new client and
initializes its I/O streams. Then it receives requests and tries to
fulfill them until the store runs out of cars.
  - Customer -
  It opens a client socket, then tries to bind to the server. Then it
randomly generates new requests and asks the seller to fulfill them.
When the store runs out of cars the execution stops.
  
-- Package description --
 - car package -
 Contains a Car interface, a Brand enum and 3 classes that implement the
Car interface. Note that the toString() method uses polymorphism (the
last car to test is kept as an instance of the interface).
 - creation package -
 Contains two combined design patterns used in the car creation. A
builder pattern is embodied in a factory pattern. We have 3 builder
implementation, specific for each car type and a general factory pattern
that gets a new car based on our "desires". In this class hierarchy we
encounter different types of exceptions and pass them on two levels.
(e.g. from a JaguarBuilder a JaguarOutOfStock exception can be thrown
which then determines the throwing of a more general exception -
CarOutOfStockException, which is finally treated in the next level).
 - exceptions package -
 Defines 4 exceptions used in my application.
 - observer package -
 Provides an implementation of the observer pattern. The pattern is used
to test the new bought cars. An observer is notified each time a new car
is acquired.
 - store package -
 Provides the implementation for the Customer and Seller, for the
runnable objects they use and for the car store. Note that the store
randomly creates cars with each initialization. A TestDriver
implementation is needed also to use the observers. I wanted to separate
this from the CarStore class.