First revision of palette intepretations

16-color 16bit compressed LZ palettes can now be recognized and parsed.
There colors are shown.
Fix the context menu style
Fix the interpretation ordering.

Also moved interpretations to a stack panel and added spacing. Should
make the interpretations easier to distinguish.
First revision of interpretation hover connect.

Whenever you hover over an interpretation, there should be some kind of
slight visual change to the data to show which bytes onscreen are
associated with the interpretation.
Add theme switch button

The default theme is chosen based on the time of day. The user can now
switch themes on the fly.
fix: using statements

Adding the Solarized using statement caused a conflict with the other
Brushes. Solarized using statement was removed to fix the issue.
fix "open"

Open needed more information - it is no longer enough just to know an
object to build. Because we end with a composite object that the window
shouldn't know about, we instead pass the window the raw data and a
factory method. That way the window can use the factory method again
later when it opens a new file. Eventually we might pass in something
more complex, like a builder object, so the user can customize / edit
the element factories.
First revision of pointer interpretation

Pointers can now look at the element factories below them in the chain
to search for interpretations. If they find one, they display it as
their own. For lists of images/palettes, this can be very useful, as you
can now see the entire list in one place.
Bugfixes for interpretation connect

In the case of pointers, the elements connected to an interpretation may
not all be in a single set: there may be multiple pointers, with space
between, pointing to the same data. The hover connect should check the
index of all elements.

Wrapped elements don't have a grid position: check their parents for a
grid position instead.
Bugfix: interpretation connect needs to scroll

When you move the data around, the interpretation connect needs to move
with it.

Also adding Freeze() to the flyweights to try and get some performance
improvements.
Initial Revision of ReadMe file
Bugfix: smaller images

my image length calculation was wrong: there are images that are
multiples of 0x40 bytes, which is just 8*8/2 = 10*4/2 = 0x20, not 0x80.
This is because the GBA stores images in 8x8 pixel blocks, so the number
of pixels will always be a multiple of 0x20.
Refactor

MainWindow and ElementFactory files were getting too large. Splitting
out Utils into its own file, and splitting out all the Gba
ElementFactories into their own file.
Initial Revision of Find

Ctrl+F, F3, and Shift+F3 now allow you to navigate through the bytes,
looking for something that fits a specific pattern. Only a byte pattern
has been implemented so far, but each parser can include a new method of
reading the search term to create search locations.
Increase Pointer Accuracy

Before, the app assumed that the first match for a pointer format is
always a pointer. Now, the app examines all possible pointer start
locations and uses a confidence metric to determine which is most likely
to be the real pointer.

- Pointers won't point to the inside of other pointers.
- Pointers won't point to a single byte of data.
- Pointers don't overlap other pointers.

Adding these three metrics removes several false positives and presents
less false negatives.
Refactor

Pointers class is very large, it gets its own file.
Move all Gba related classes into a namespace and remove the prefix.
Introduction of pokemon string parsing

Uses a rather dumb implementation right now - looks for at least 3
letters in a row within the proper range. Doesn't use pointers, doesn't
assume very much accuracy. Seems to have lots of false positives, but
all the important looking strings are in place.
improve string parser

Parser has less false positives by recognizing that strings end with
0xFF. Strings can now provide interpretations for pointers. This looks a
little strange for arrays, but works well for single strings.
improve string parser

The string parser now caches interpretations after the first time
they're requested. This speeds up performance, removes a few bugs, and
prevents degredation of startup performance by not pre-computing them
all.

The parser now recognized strings that start with a single letter and a
space, such as "A ..." or "I ...".
GUI Improvements

Max column count increased to 48 now that I have proof of data wider
than 32 (item data is ~44 bytes).

When showing / hiding the interpretation pane, the window will attempt
to auto-resize to keep the data aligned the same.