Added new engine

I changed the idiom of the program to become fundamentally
multithreaded.

Every relevant piece of code must be placed inside what is essentially a
new process (not a new thread!), and runs more or less independently
from each other.  Some of these processes are computationally expensive,
which is why using threads will not work.

Each "worker" or process is isolated from each other, and may
communicate by sending commands. Data is read and updated through a
shared "datastore", which is automatically kept updated between all the
active processes.

The new design is still monolithic in the sense that the commands must
be routed through a single "mailbox" object, rather then in a more
localized message-passing style, but this is so we can more easily log
and monitor commands as they appear.

Currently, the datastore is just a dict from multiprocessing.Manager.
Later, we may change to a proper database.
Added shitty experimental code, got actual code working
Added api to support user interaction; added experimental webcam code
Moved files
Got rid of unused methods.