[grub4dos] More work towards a GRUB4DOS bus
[grub4dos] Add IRP handler for IRP_MN_QUERY_ID
[project] Make general library sub-directory

The idea is to shift Wvl* library functions into here.
[thread] Minor cosmetic changes to header

Also rename the "Lib" folder in the wxDev-C++ project
tree to "WvLib".
[irp] Move into wvlib subdir
[libbus,irp] Change WvlBusSysCtl to WvlIrpPassToLower

It didn't really have to do with buses.
[libbus,irp] Change WvlBusPower to WvlIrpPassPowerToLower

It didn't really have to do with buses.
[irp] Minor cosmetic changes

Also call WVL_M_DEBUG_IRP_END() before completing the IRP.
[irp] Re-introduce IRP handler table and function

I've lost track of how many times an IRP handling scheme
has been implemented and removed, but here's one again.
[safehook] Introduce safe INT 0x13 hook bus

A "safe INT 0x13" hook will be a bus device.  If there
is another hook in the chain, that will be a child
device.  For a particular safe hook vendor (such as
MEMDISK or GRUB4DOS), we could attach an FDO for
additional functionality, such as exposing disks as
child devices.
[safehook] Move probe into safe hook area
[safehook] Bus PDO probing, creation, walking

The WinVBlock bus will perform a probe of the INT 0x13 vector.
If a "safe hook" is found, a bus PDO for that hook will be
created.  When that bus is queried for its children, it will
perform a one-time check of the next hook in the chain and
determine whether or not there is a child bus for that hook,
and so on.

Things are temporarily broken until the GRUB4DOS and MEMDISK
buses are implemented as FDOs on top of a safe hook PDO.
[bus] Allow installation of raw PDOs

"Safe INT 0x13 hook" bus devices are driven entirely by the
WinVBlock driver, so allow them to be installed with the .INF
file and allow for the AddDevice routine to succeed if the
PDO is already driven by WinVBlock.

A side effect to note is that some other WinVBlock PDO (such
as a disk) could be forced to install by a user...  That
is not particularly useful to the user, however.
[safehook] Return the vendor ID as the hardware ID

Such as "MEMDISK_Hook" and "GRUB4DOSHook".
[driver] Cosmetic changes to DriverEntry
[driver] Introduce mini-driver registration

The idea is that "mini-drivers" will call WvlRegisterMiniDriver from
their DriverEntry routine, where they will be registered with their
AddDevice and Unload routines.  There will be both internal and
external mini-drivers.  Internal drivers will be those modules linked
into the main WinVBlock driver and external drivers will be those
like AoE and HTTPDisk, but their interface will be the same.

When the main driver unloads, it will invoke each internal mini-driver's
Unload routine, then wait for all external mini-drivers to deregister.

In a future commit, registered mini-drivers' AddDevice routines will
be called by the main driver's AddDevice routine.

An atomic ("locked") list type is also introduced, along with some
utility functions.
[driver] Introduce resource tracking type and functions

Pretty straight-forward.  An event is set and cleared as the usage
is zero and non-zero, respectively.
[driver] Some tracking of driver usage

A few parts of the code will now track driver usage.  The driver
will not unload until all usage reaches zero.
[mainbus] Move main bus and dummy modules into here

The main bus and its dummy children are now their own build.
[driver] Introduce device threads

Two new functions that mini-drivers can use: WvlCreateDevice and
WvlDeleteDevice, which parallel IoCreateDevice and IoDeleteDevice.

When a device is created with WvlCreateDevice, it will have a
thread started for processing the device's IRPs and other work
items that need to be completed in a context in which the majority
of the device state is race-free.

This means that all of a device's IRPs will be processed
synchronously.  There is a performance penalty associated with
this, but until such a day as there's something better, this
strategy will do.  Right now, the focus is on functionality and
bug-fixes and to-dos and features.  Performance can come later.