How can I determine how much memory a function occupies?
I spent some time digging into the map file (which was also a suggestion by @jonk), and it looks like function sizes are available in the file.

For anyone interested, if you look inside a map file (in this case a XC8 generated one)

Name             Link     Load   Length    Selector   Space Scale
text3             41       41      195        8           0


The length of text3 @ address 0x41 is 0x195 bytes in length.

Elsewhere in the map file, you'll find the symbol table and will find what function is linked to text3.

_foo_open    text3        00041


When I compile program with foo_open() my program size is 1878 byes (0x756) and when I completely remove foo_open() my program size is 1472 bytes (0x5C0). 

The difference between is 0x196. I am off by a 1 (not sure where/why) but I think this is close enough to what I am looking for.



So going even furthur into this, there is a section called MODULE INFORMATION, that tells you how big your module is, as well as each function. 

Module    Function      Class          Link    Load   Size
foobar_driver.c
    _clear_bar      CODE            0729    0000    7
    _display        CODE            0583    0000    21
    _set_bar        CODE            032A    0000    56
    _set_foo        CODE            02F3    0000    56
    _turn_off       CODE            0761    0000    5
    _clear_foo      CODE            0723    0000    7
    _toggle         CODE            05BD    0000    20