first commit for "wifi tinkering" project

I worked outside of the repo to test someone else's project and figure
out how to build a program that could connect to my local wifi network.
I didn't commit things until I knew that the thrashed project was going
to work.
been tinkering with timer shenanigans

I have my own millisecond timer for program delays, and I was trying to
add a second timer interrupt, one that triggered every 50 milliseconds,
to do TCPIP stack handling.  I ran into timing trouble though.

Apparently, the second timer is fine up until I want it to trigger
exactly once per second, and then it goes haywire.  I haven't figured
out why yet.
timer stuff abandoned, continuing wifi

The timer shenanigans were bizarre, so I eventually abandoned them and
moved on to the wifi communication.  Due to the block nature of the
TCPIP stack servicing when it first connects to the network, the stack
services must be in either an RTOS task or in main()'s while(1) loop.

I chose the latter, and am now attempting to migrate some code from
FreeRTOS in a friend's project to non-RTOS code.  Doing this will
simplify the presentation and make the underlying operations easier to
understand.
I'm stuck

I'll try to strip down my friend's FreeRTOS + WiFi project and get that
to work on my network, and then I'll resume this project to get it to
match.
got sockets working, now communication

Tera Term doesn't complain about logging in anymore, but the thing is
getting stuck when I try to send and receive information.  In
particular, it gets stuck way down in the TCPIP stack when it waits for
an interrupt from the wifi pmod's SPI pin.

I got a tip from someone on Reddit: Don't call functions from within
interrupts because weird stuff can happen.

I am calling my "TCPIP send and receive" function from within my
interrupt, and perhaps because of the way this PIC32 processor works and
the way that the SPI interrupt is configured, the SPI interrupt can't
fire while my timer interrupt (the one that calls the "TCPIP send and
receive" function) is active.

Committing before resorting to a "function queue" design.
yay! data is being sent and received!

Hooray!  The interrupt was the problem.  Now, instead of calling the
"TCPIP send and receive" function directly, my timer interrupt calls a
function and adds the function pointer to a queue that is subsequently
called by the while(1) loop in main().

Now I will begin taking all of this mess and putting it into a simple
demo project, where it will be cleaned up and prepared to be used by
other people.